程序代碼在運行前與運行時的內存分佈情況

大家是不是很疑惑,我們平時寫的代碼,內存中是如何去存儲的?分兩種情況,程序運行前,與運行時的程序內存分配情況。


知識補充:文件佈局在內存中的映射

從上到下依次遞減,最上面爲高地址:

.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.程序運行時,動態申請的變量存於堆中



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章