详细参见: 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

附上图片,转载自: