1. 程式人生 > >記憶體虛擬地址空間的劃分空間

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

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

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

以4g為例:

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

然後剩下的3g記憶體就是用來存放使用者自己的相關資料了:

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

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

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

再下方就是堆空間:

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

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

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

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

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

2.ordata:存放常量;

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

最下方存放的則是程式碼段:

存放的當然就是程式碼了。。