對於程序的記憶體對映,總是一知半解,記得幾個月前面試一家公司問:畫出linux下程式執行的記憶體對映圖。
核心區,1gb,使用者**不能直接訪問,只能通過系統呼叫執行。
棧,可變大小,一般為8mb,同時棧頂有對應程序的結構體,所以,棧空間小於實際設定的大小。棧從上至下增長,所以如果棧溢位,則會破壞程序結構體。
記憶體對映區,也就是mmap實現的,負責將檔案對映到記憶體,這樣就可以直接訪問,不需要通過read,而是直接通過指標訪問。
堆,由下而上增長,malloc負責呼叫。
bss段,未初始化的全域性或者靜態變數,在這裡會被初始化為0.
data段,資料段,已經初始化的全域性或者靜態變數。
text段,可執行**。
這裡展示了乙個更複雜的問題就是如果指標被初始化為乙個字串,那麼字串將儲存在text段。如果是數值,那麼就只儲存在data段。
程式 程序 記憶體對映
程式如何產生的?源 經過下面四個步驟 1 預編譯 2 編譯 3 彙編 4 連線 程式就產生了。這些工作都是編譯器做的,可見編譯器的重要性。程式執行的過程是什麼?程式和程序有什麼區別?程式是儲存在硬碟上的靜態的二進位制可執行 程序是在記憶體中執行,並不斷發生變化的活的二進位制執行 程式如何變成程序的?...
程式 程序 記憶體對映
程式如何產生的?源 經過下面四個步驟 1 預編譯 2 編譯 3 彙編 4 連線 程式就產生了。這些工作都是編譯器做的,可見編譯器的重要性。程式執行的過程是什麼?程式和程序有什麼區別?程式是儲存在硬碟上的靜態的二進位制可執行 程序是在記憶體中執行,並不斷發生變化的活的二進位制執行 程式如何變成程序的?...
程序間通訊之記憶體對映 mmap記憶體對映
讀資料端程序 mmanp r.c include include include include include include define len 0x1000 int main close fd while 1 close fd munmap addr,len return 0 寫資料端程序 ...