大家是不是很疑惑,我們平時寫的代碼,內存中是如何去存儲的?分兩種情況,程序運行前,與運行時的程序內存分配情況。
知識補充:文件佈局在內存中的映射
從上到下依次遞減,最上面爲高地址:
棧
堆
.bss
.data
.rodata
.text
未映射區域
第一種情況:代碼程序沒運行前的內存分佈情況
1.未初始化的全局變量和靜態變量主要存放在 .bss中
int A;
static int A;
2.初始化的全局變量和靜態變量主要存放在 .data中
int A=5;
static int A=5;
3. 只讀存儲區存放在.rodata中 char a="hello";
printf(“%s”,a); //輸出的hello就存於只讀存儲區中
4.程序的可執行代碼存放在.text
void s(int a) //存放在.text中
{
printf("%d\n",a);
}
s(7); //存放在.text中
第二種情況:程序運行時的內存分配
在第一種情況的基礎上增加棧和堆
1.程序運行時,局部變量存放在棧中
2.程序運行時,動態申請的變量存於堆中