參考: csdnhttp://blog.csdn.net/chenyiming_1990/article/details/9476181
開源中國:http://my.oschina.net/pollybl1255/blog/140323
/*高地址
*
* 棧 局部變量(向下增長)
* 堆 動態申請內存(向上增長)
* bss 未初始話全局變量(初始化爲0)
*
* data 只讀數據段 (已始化全局變量,靜態變量,常量)
* code 只讀代碼段
*低地址
* */
#include <stdlib.h> #include <stdio.h> /*常量*/ 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 局部變量:0x5 p2:0xbfca4bbc *********堆區**************: 動態內存區:0xbfca4bc8 動態內存區:0x9c34008 *********bss 區************: 非初始化全局變量:0x8049a00 ********only read 只讀區******** data 段: 全局初始化變量:0x80499f0 p1:0x80486e8 常量:0x80486e4 靜態變量:0x80499fc 代碼段: main地址:0x8048424 子函數2:0x804860a 子函數1:0x80485f6