對C程式的儲存空間布局的初識

2021-07-12 01:56:01 字數 581 閱讀 5882

今天在老師的指引下我考慮了c語言的儲存空間布局,才深深的感到了自己是個小白,什麼也不懂,或許那句話「程式設計師為啥會犯錯誤,不是因為他不懂什麼而是因為覺得自己都懂。」

正文:之所以在c中能自如的呼叫函式那都是因為棧(stack)的存在,在棧中儲存著函式呼叫的場景資訊,這句話是書上的,我是這麼理解的,這些場景資訊也就是包括函式的入口位址,形參,函式的返回值,以及一些暫存器的值。棧是自動分配記憶體的。

命令列引數和環境變數: 棧:

堆:非初始化資料段:未初始化的全域性變數和靜態變數

初始化資料段:已經初始化的全域性變數和靜態變數

正文段:程式就在這裡

此外小知識點我還要撿起來:

printf:輸出無符號整形變數 用%u

輸出十六進製制  用%x

今天我學到的新名詞:棧幀(未完全懂)

1.靜態庫libstatic.a和動態庫dynamic.dll

我的認識:

2.為什麼要引入段位址?

inter提出用段位址+偏移位址的方式來定址,這是為了讓cpu能訪問更多的記憶體,如果有偏移位址的話,可用的最大記憶體只有64kb,也就是說:

段位址存在最初意義是為了隔離。

C程式的儲存空間布局

下午突然想到了c程式的儲存空間布局,忘了,翻書溫習,記錄如下 乙個c程式的組成 正文段,初始化資料段 資料段 非初始化資料段 bss 棧,堆 下面簡單介紹下這些段 正文段 由cpu執行的機器指令部分。通常,正文段是可共享的,在儲存器中只需要有乙個副本即可,很多時候,正文段也是唯讀的,防止意外修改 初...

C程式的儲存空間布局

c程式一直由下面幾部分組成 正文段 這是由cpu執行的機器指令部分。通常,正文段是可共享的,所以即使是頻繁執行的程式在儲存器中也只需乙個副本,另外,正文段常常是唯讀的,以防止程式由於意外而修改其自身的指令。初始化資料段 通常將此段稱為資料段,它包含了程式中需要明確地賦初值的變數。非初始化資料段 通常...

C程式的儲存空間布局

c程式一直由下列幾部分組成 正文段 這是由cpu執行的機器指令部分。通常,正文段是可共享的,所以即使使是經常執行的程式 如文字編輯程式,c編譯程式,shell等 在儲存器中也只需有乙個副本,另外,正文段常常是唯讀的,以防止程式由於意外事故而修改其自身的指令。初始化資料段 通常將此段稱為資料段,它包含...