我們知道,在32位機器上linux
作業系統中的程序的位址空間大小是4g,其中0-3g是使用者空間,3g-4g是核心空間。其實,這個4g的位址空間是不存在的,也就是我們所說的虛擬記憶體空間。
c程式一直由下列幾部分組成:
a.正文段。這是由cpu執行的機器指令部分。通常,正文段是可共享的,所以即使是經常執行的程式(如文字編輯程式、c編譯程式、shell等)在儲存器中也只需要有乙個副本,另外,正文段常常是唯讀的,以防止程式由於意外事故而修改器自身的指令。
b.初始化資料段。通常將此段稱為資料段,它包含了程式中需賦初值的變數(也就是初始化的全域性變數以及靜態變數)。
c.非初始化資料段。通常將此段稱為bss段,在程式開始執行之前,核心將此段初始化為0。函式外的說明:
d.棧。儲存相應的區域性變數
e.堆。通常在堆中進行動態儲存分配。由於歷史上形成的慣例,堆位於非初始化資料段頂和棧底之間。
linux 程序位址空間
乙個linux程序的虛擬位址空間分布如下圖所示,分為使用者空間和核心空間,對於乙個32位作業系統來說,4gb的空間分成兩部分,低位址的0 3g給使用者空間,高位址的3g 4g給核心空間 2.1 唯讀資料段 rodata,又叫做常量資料段 存放唯讀資料 字串常量和const修飾的全域性變數 const...
Linux 程序位址空間 簡介
程序虛擬位址空間是linux的乙個重要抽象,系統為每乙個執行的linux程序提供了4gb的虛擬位址空間,程序之間不會相互干擾,僅能訪問自己的虛擬位址空間位址。linux程序的虛擬位址空間分為user和kernel兩個部分,0 3g是為程序的user位址空間,3g 4g為kernel位址空間。此外程序...
程序位址空間
這篇文章應該不能說是原創的,這裡的記錄都是我通過閱讀整理來的,並沒有太多的自己的想法。資料 現代作業系統 之所以去了解位址空間也是因為在學習dll的時候看到要將dll對映到程式的位址空間,不甚明了所以去查詢相關的資料。位址空間其實很好理解 當然針對早期的機器 早期的機器是沒有ram,rom,cach...