locate.c代码解释

    xiaoxiao2025-02-10  40

    代码功能

    程序向我们展示了函数调用时函数和数据在内存中是怎样存放的。

    内存分布

    全局数据区域

    存放全局变量,常量。 例如

    show_pointer((void *) big_array, "big array");//big array是全局变量

    代码区域

    静态成员函数和非静态成员函数都是在类的定义时放在代码区域。 例如

    show_pointer((void *) malloc, "malloc");//malloc放在代码区域

    存放局部变量,参数,返回值和返回地址。 例如

    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); } show_pointer((void *) &global, "global");//放在栈中

    除去全局数据区域,代码区域,栈所拥有的空间,剩下的是空间是堆的。

    代码块

    #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; }

    测试结果

    最新回复(0)