程式在執行時要在記憶體開闢一塊區域當作棧使用,用來存放函式中的普通變數。那堆區是如何產生的,用來存放什麼東西?
程式在執行過程中如何分配記憶體,棧區、堆區對於程式的意義是什麼,如何從記憶體映像的角度理解這一切?
程序的記憶體映像,指的是核心如何在記憶體中存放可執行程式檔案。具體地講,可執行程式檔案在執行時就成了記憶體映像,它們是對應關係。但兩者又是有區別的 ——
位置上講,可執行程式位於硬碟,記憶體映像位於記憶體
從附屬記憶體來講,可執行程式沒有堆疊,記憶體映像被分配了堆疊
從資料上講,可執行程式是靜態的,記憶體映像是動態的
總的來說,兩者區別是執行前和執行時的區別。
棧(stack)編譯器自動分配釋放,存放函式引數、函式返回位址、普通變數
堆(heep)由程式設計師動態分配釋放,若程式設計師不釋放,則可能在程式結束後由os釋放
全域性區(動態區)存放初始化的全域性變數和靜態變數,未初始化的放在相鄰的區域(bss),程式結束後由os釋放
常量區(資料區)常量字串
**區存放函式體的二進位制**
程式的記憶體映像
一 程式的記憶體映像 乙個由c c 編譯的程式的記憶體分布分為以下幾個部分 1 棧 stack 也是我們所說的堆疊,是由編譯器自動分配釋放,用來存放函式引數值,函式的返回位址,非靜態區域性變數的值等。其操作方式類似於資料結構中的棧 後進先出 lifo 2 堆 heep 一般由程式設計師分配釋放,若程...
程式的記憶體映像
這幾天在看c語言的書籍,對c的記憶體映像有點疑惑,於是,查詢資料,查閱了龐麗萍編著的 作業系統原理 第四版中的第七章主存管理中的段式系統,此外還看了王元珍 曹忠生 韓忠芬編著的 80x86組合語言程式設計 得到了乙個自己對在80x86結構下的記憶體對映的理解。不過也許自己的理解是錯的或者有不到之處,...
linux c的記憶體映像
記憶體映像其實就是在記憶體中建立乙個和外存檔案完全相同的映像。使用者可以將整個檔案對映到記憶體中也可以部分對映到記憶體。系統會將對記憶體映像的改動如實的反映到外存檔案中。從而實現了通過記憶體映像對外存檔案的操作。記憶體映像的特點 1 可以加快對io的操作速度。2 使用者可以通過指針對檔案進行操作,間...