详细参见: csdn:
开源中国:
/*高地址
* * 栈 局部变量(向下增长) * 堆 动态申请内存(向上增长) * bss 未初始话全局变量(初始化为0) * * data 只读数据段 (已始化全局变量,静态变量,常量) * code 只读代码段 *低地址 * */#include#include /*常量*/ const int ca = 10 ;//全局常量 data区 static sa;//静态,data区 int a;//全局未初始化 bss 区 int b = 4;//全局初始化 data区 /*常量*/ const int ca = 10 ;//全局常量 data区 void func1(); //子函数,代码区 void func2();//子函数,代码区 int main(void) { /*申请一块内存 堆*/ int *p = NULL;//栈 p = (int *)malloc(sizeof(int)); *p = 5; char *p1 = "hello world";//data区 char p2[] = "hello world";//栈区 /*局部变量*/ int aa; /*栈区*/ printf("***********栈区************\n"); printf("局部变量:%p\n",&aa); aa = 5; printf("局部变量:%p\n",aa); printf("p2:%p\n",p2); printf("\n\n"); /*堆区*/ printf("*********堆区**************:\n"); printf("动态内存区:%p\n",&p); printf("动态内存区:%p\n",p); /*非初始化数据段*/ printf("\n\n"); printf("*********bss 区************:\n"); printf("非初始化全局变量:%p\n",&a); printf("\n\n"); /*只读区*/ printf("********only read 只读区********\n"); printf("data 段:\n"); printf("全局初始化变量:%p\n",&b); printf("p1:%p\n",p1); printf("常量:%p\n",&ca); printf("静态变量:%p\n",&sa); printf("\n\n"); printf("代码段:\nmain地址:%p\n",main); printf("子函数2:%p\n",func2); printf("子函数1:%p\n",func1); } void func1() { printf("子函数\n"); } void func2() { printf("子函数\n"); }
结果:
***********栈区************局部变量:0xbfca4bb8局部变量:0x5p2:0xbfca4bbc*********堆区**************:动态内存区:0xbfca4bc8动态内存区:0x9c34008*********bss 区************:非初始化全局变量:0x8049a00********only read 只读区********data 段:全局初始化变量:0x80499f0p1:0x80486e8常量:0x80486e4静态变量:0x80499fc代码段:main地址:0x8048424子函数2:0x804860a子函数1:0x80485f6
附上图片,转载自: