虛擬位址空間

2021-08-31 21:40:51 字數 1186 閱讀 2378

(1).text**段:存放程式執行的一塊記憶體區域,此區域大小在執行之前就已經確定下來了。

(2).data資料段:(全域性初始化資料區/靜態資料區)只初始化一次,指用來存放程式中已初始化的全域性變數的一塊記憶體區域(已經初始化的全域性變數、靜態變數和常量)

(3).bss未初始化資料區:用來存放程式中未初始化的全域性變數的一塊記憶體區域,屬於靜態記憶體分配,程式開始就將其清零了。

(4)heap區:程式設計師管理

(5)stack區:存引數,區域性變數的值以及進行任務切換時存放任務的上下文

text和data段都在可執行檔案中,由系統可從可執行檔案中載入,而bss段不在可執行檔案中,由系統初始化的段只儲存沒有值的變數,事實上並不惜要儲存這些變數的映像,執行時所需bss段大小記錄在目標檔案中,但是bss段並不佔據目標檔案的記憶體空間

堆疊的區別:

(1)管理方式:heap資源由程式設計師控制,stack由編譯器自動管理

(2)空間大小:一般32位系統,heap可以達到4g,stack有一定的大小空間,大約1m

(3)生長方向:heap向上增長(記憶體增加),stack相反

(4)分配方式:heap動態分配,stack有靜態分配也有動態分配,靜態分配有編譯器完成,動態分配由alloc函式分配,但是棧的給他發票由編譯器進行釋放,無需程式設計師實現

(5)碎片問題:heap頻繁new/delete勢必會造成記憶體空間的不連續,從而造成大量的隨便,效率低,棧是先進後出的佇列,一一對應,永遠不可能有乙個記憶體塊從棧中間彈出來

(6)分配效率:棧是機器系統提供的資料結構,計算機會從底層上支援棧這個結構,分配專門的暫存器存放棧的位址,壓棧出棧都有專門的指令執行,因此棧的效率高,堆是c/c++庫函式提供的,機制複雜,有一定的演算法,所以效率低

(7)系統響應:heap,系統中有乙個記錄空閒記憶體位址的鍊錶,當系統收到程式申請時,遍歷鍊錶,找第乙個空間大於申請空間的堆節點,刪除空閒結點鍊錶中該節點,並且將該節點空間分配給程式(大多數系統會在這塊記憶體空間首位址記錄本次分配大小,這樣才能正確釋放),stack只要棧的剩餘空間大於所申請空間,系統為其提供記憶體,否則,報異常提示棧出

虛擬位址空間

當處理器讀或寫入記憶體位置時,它會使用虛擬位址。作為讀或寫操作的一部分,處理器將虛擬位址轉換為實體地址。通過虛擬位址訪問記憶體有以下優勢 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x0...

虛擬位址空間

14 共 14 對本文的評價是有幫助 評價此主題 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x00000000 至 0x7fffffff。對於 64 位程序,虛擬位址空間為 8 tb,...

虛擬位址空間

大多數計算機使用8位的塊,或者叫做位元組 byte 來作為最小的可定址的儲存器單元,而不是訪問儲存器中單獨的位。機器級程式將儲存器視為乙個非常大的位元組陣列,稱為虛擬儲存器。儲存器的乙個位元組都由唯一的數字來標識,稱為它的位址 虛擬位址 所有可能虛擬位址的集合就稱作虛擬位址空間。引自 深入理解計算機...