locate.c代码分析

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

static void show_pointer(void *p, char *descr) {
    //    printf("Pointer for %s at %p\n", descr, p);
    printf("%s\t%p\t%lu\n", descr, p, (unsigned long) p);
}

char big_array[1L<<24];    /*  16 MB */
//char huge_array[1L<<31];   /*   2 GB */
char huge_array[1L<<30];/*   1 GB */
int global = 0;

int useless() { return 0; }

int main ()
{
    void *p1, *p2, *p3, *p4;
    int local = 0;
    p1 = malloc(1L << 28);
    p2 = malloc(1L << 8);
    //p3 = malloc(1L << 32);
	p3 = malloc(1L << 16);
    p4 = malloc(1L << 8);

    show_pointer((void *) big_array, "big array");
    show_pointer((void *) huge_array, "huge array");
    show_pointer((void *) &local, "local");
    show_pointer((void *) &global, "global");
    show_pointer((void *) p1, "p1");
    show_pointer((void *) p2, "p2");
    show_pointer((void *) p3, "p3");
    show_pointer((void *) p4, "p4");
    show_pointer((void *) useless, "useless");
    show_pointer((void *) exit, "exit");
    show_pointer((void *) malloc, "malloc");
    return 0;
}

一.代码作用.
输出各项数据的地址,包括指针的地址,基本类型的地址,函数的地址等等.
二.代码分析
代码核心是show__pointer函数,该函数是输出各项地址的关键.在主函数中声明各个数据通过show__pointer函数输出其对应的十六进制的地址和十进制的地址.
三.输入输出实例
locate.c代码分析
输入输出正如代码用途所写的那样.
四.个人想法
我认为该代码内藏玄机,绝非我分析的那样肤浅,否则也不会声明一系列数据,再输出其地址,但我现在的水平还不能看出它正真的意图.或许指针指向的存储大小在地址上有关联.但在我计算时仍然相差一点.