記憶體虛擬位址空間的劃分空間

2021-07-24 09:21:44 字數 754 閱讀 1777

當我們編碼的時候我們的源程式一般都放在硬碟上,然後當我們使用這個程式時電腦就會在記憶體上執行這個程式,然而電腦記憶體資源是十分緊缺的,一般電腦記憶體都是4g,8g,2g。。所以當我們執行程式時並不是直接在記憶體上執行,而是在記憶體產生的虛擬位址空間上先進行,該虛擬空間一般也是4g,8g....。

這就涉及到了虛擬空間的記憶體劃分了.

以4g為例:

首先在虛擬空間的高位址存放核心,核心是作業系統最基本的部分。它是為眾多應用程式提供對計算機硬體的安全訪問的一部分軟體,這種訪問是有限的,並且核心決定乙個程式在什麼時候對某部分硬體操作多長時間。核心的分類可分為單核心和雙核心以及微核心。因為核心十分重要所以分配記憶體1g專門存放

在它下方並且緊挨著核心存放區域的就是棧空間:

資料型別; 用來存放區域性變數,函式形參和自動變數(近期的版本已經很少使用自動變數這個概念了);

棧空間的特點; 存放資料時遵循先進後出的原則,(即先存放進棧空間的資料在取出時在後面取出,這些都是由系統管理的);

再下方就是堆空間:

型別:主要是給malloc,calloc,ralloc 分配空間

堆空間的特點:遵循先進先出的原則,可以由使用者自己進行管理;

再下方是全域性資料區(也叫資料區)

這一區域主要有三個部分組成:

1.bss : 存放未初始化的全域性變數;

2.ordata:存放常量;

3.靜態資料區:存放初始化的全域性變數以及static修飾的變數;

最下方存放的則是**段:

存放的當然就是**了。。

程序的虛擬位址空間劃分

虛擬位址 virtual address cpu啟動保護模式後,程式執行在虛擬位址空間中。注意,並不是所有的 程式 都是執行在虛擬位址中。cpu在啟動的時候是執行在實模式的,bootloader以及核心在初始化頁表之前並不使用虛擬位址,而是直接使用實體地址的。每乙個程序被給予它的非常私有的虛擬位址空...

程序虛擬位址空間的劃分

使用的linux作業系統32位 4gb劃分為兩大部分核心和使用者,核心 1g,使用者3g。1g的核心位址空間可訪問全部的物理記憶體位址 3g的使用者位址空間訪問最大 3g的物理記憶體位址 使用者又劃分為棧空間,堆空間,全域性 資料區,段。1 棧空間 儲存著區域性變數,函式形參,自動變數 2 堆空間 ...

VC 記憶體虛擬位址空間

windows使用一組固定的範圍來分割程序的4gb虛擬位址空間,因此有時可以通過檢視指標的返回值來判斷指標是否有效。虛擬位址空間 大小範圍 作用0x00000000 0x0000ffff 64kb 不能用來檢測空指標賦值 訪問衝突 0x00010000 0x7ffeffff 64kb 2gb 64k...