C程式的記憶體由以下部分組成:
正文段:由cpu執行的機器指令部分
初始化資料段:全局變量中已初始化部分
非初始化資料段:全局變量中未初始化部分
棧:局部變量和每次函數調用時所需儲存資訊都存放在此段
堆:通常在堆中進行動态存儲配置設定
這些段的一種典型排列方式是:
指令行參數和環境變量 高位址
棧
堆
未初始化資料段
初始化資料段
正文 低位址
#include <stdio.h>
#include <unistd.h>
int g_init_a=0;
int g_init_b=0;
int g_a;
int g_b;
int fun()
{
return 0;
}
int main()
{
int a;
int b;
int *c = new int();
printf("指令行參數和環境變量/n");
printf("environ:/t%x/n",environ);
printf("棧/n");
printf("a:/t/t%x/n",&a);
printf("b:/t/t%x/n",&b);
printf("堆/n");
printf("c:/t/t%x/n",c);
printf("非初始化資料段/n");
printf("g_b:/t/t%x/n",&g_b);
printf("g_a:/t/t%x/n",&g_a);
printf("初始化資料段/n");
printf("g_init_a:/t%x/n",&g_init_a);
printf("g_init_b:/t%x/n",&g_init_b);
printf("正文段/n");
printf("fun:/t/t%x/n",fun);
return 0;
}
在linux2.6核心下用g++編譯器編譯的執行結果:
指令行參數和環境變量
environ: c34b3718
棧
a: c34b3614
b: c34b3610
堆
c: 501010
非初始化資料段
g_b: 500cd8
g_a: 500cd4
初始化資料段
g_init_a: 500ccc
g_init_b: 500cd0
正文段
fun: 4006d8
友情連結:網購優惠資訊網