記憶體虛擬地址空間的劃分空間
阿新 • • 發佈:2019-02-09
當我們編碼的時候我們的源程式一般都放在硬碟上,然後當我們使用這個程式時電腦就會在記憶體上執行這個程式,然而電腦記憶體資源是十分緊缺的,一般電腦記憶體都是4g,8g,2g。。所以當我們執行程式時並不是直接在記憶體上執行,而是在記憶體產生的虛擬地址空間上先進行,該虛擬空間一般也是4g,8g....。
這就涉及到了虛擬空間的記憶體劃分了.
以4g為例:
首先在虛擬空間的高地址存放核心,核心是作業系統最基本的部分。它是為眾多應用程式提供對計算機硬體的安全訪問的一部分軟體,這種訪問是有限的,並且核心決定一個程式在什麼時候對某部分硬體操作多長時間。核心的分類可分為單核心和雙核心以及微核心。因為核心十分重要所以分配記憶體1g專門存放
然後剩下的3g記憶體就是用來存放使用者自己的相關資料了:
在它下方並且緊挨著核心存放區域的就是棧空間:
資料型別; 用來存放區域性變數,函式形參和自動變數(近期的版本已經很少使用自動變數這個概念了);
棧空間的特點; 存放資料時遵循先進後出的原則,(即先存放進棧空間的資料在取出時在後面取出,這些都是由系統管理的);
再下方就是堆空間:
型別:主要是給malloc,calloc,ralloc 分配空間
堆空間的特點:遵循先進先出的原則,可以由使用者自己進行管理;
再下方是全域性資料區(也叫資料區)
這一區域主要有三個部分組成:
1.bss : 存放未初始化的全域性變數;
2.ordata:存放常量;
3.靜態資料區:存放初始化的全域性變數以及static修飾的變數;
最下方存放的則是程式碼段:
存放的當然就是程式碼了。。