物理內存,虛擬內存,進程地址空間


1. 物理內存:

物理內存指的是插在計算機主板內存槽上的實際物理內存,CPU可以直接進行尋址;

物理內存的容量是固定的,但是尋址空間卻取決於cpu地址線條數,如32位機,則尋址空間為2^32=4G,

即最大支持4G的尋址空間,即使我們插入了32G容量的內存條,我們也只能擁有4G的物理內存;

 

2. 虛擬內存:

進程執行需要將代碼和數據放在內存中,但是物理內存是有限的,當進程比較多的時候,容易造成內存耗盡,而虛擬內存有效的解決了這個問題;

 

進程創建加載的時候,自身感知獲得到了一個連續的內存地址空間,而實際上內核只是分配了一個邏輯上的虛擬內存空間,並且對虛擬內存和磁盤通過mmap做映射關系,對虛擬內存和物理內存做映射關系;等到程序真正運行的時候,需要某些數據,並且不在物理內存中,才會觸發缺頁異常,進行數據拷貝;

 

虛擬內存空間和磁盤之間的映射使用mmap完成,說白了虛擬內存空間就是磁盤上的一塊區域;

 

3. 進程地址空間:

Linux進程地址空間包含以下幾個部分:

1. 代碼段:指令;

2. 數據段:初始化的全局變量;

3. BSS段:未初始化的全局變量;

4. 堆:malloc動態分配內存使用堆,從低地址向高地址增長;

5. 共享庫和共享內存:加載共享庫和使用mmap共享內存;

6. 棧:自動變量和函數使用棧,從高地址向低地址增長;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM