先贴原理图,变量在内存中的分配如下图
stack段:局部变量存放区域。函数中的局部变量都是存放在栈中
data段:初始化为非0全局变量和初始化为非0静态局部变量(static)
bss段:(未初始化或者初始化为0的) 全局变量和静态局部变量
text段:存放代码,only read
heap:自己申请的内存区域(malloc和free)
下面是例程,这个例程能很清晰地看到各种变量在内存中储存位置,来方便我们与上面地原理相印证
#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