1、虛擬記憶體位址
每個程序都有4g的虛擬記憶體位址,當程序需要真正的物理空間時,向系統申請,系統會分配給程序相應的物理記憶體空間。
系統會將程序的一部分虛擬記憶體位址和分配好的物理記憶體之間一 一對應起來,這個過程叫記憶體對映。
2、產生段錯誤的原因
1>當程式訪問或修改沒有許可權訪問或修改的記憶體空間時,會產生段錯誤。
2>當使用乙個虛擬記憶體位址時,這個位址並沒有和真正的物理記憶體空間對映,也會產生段錯誤(絕大部分的虛擬記憶體位址沒有對應的記憶體空間)
3、堆中分配空間malloc
當使用malloc在堆中分配空間時,malloc會在分配的空間後加上乙個結束標記 (占用12個位元組),所以使用malloc分配空間時一定不要越界訪問,否則會破壞malloc後台維護的資料結構,
導致記憶體空間無法釋放。
malloc比較複雜,會在後台維護乙個雙向鍊錶的資料結構來管理好分配的空間。
4、分配物理空間
#include #include int main()
作業系統分配物理空間時,會以頁為單位,一般乙個頁占用4096個位元組。
系統對malloc格外照顧:
第一次malloc時,系統會給malloc對映33個頁面的物理記憶體空間,以後malloc就從33個頁面中獲取使用的空間。
5、brk以及sbrk
//sbrk分配空間例項圖
linux c 記憶體管理(二)
3.指標與陣列的比較 不同點 陣列 要麼在驚天儲存區域被建立 如全域性陣列 要麼在棧上被建立。陣列名對應著 而不是指向 一塊記憶體,其位址與容量在生命週期內保持不變,只有陣列的內容可以改變。指標 可以隨時指向任意型別的記憶體塊,它的特徵是 可變 所以我們常用指標來操作動態記憶體。兩者特徵比較的例子 ...
複習 linux記憶體管理
頁 page 是核心的記憶體管理基本單位。linux mm types.h struct page 儘管處理器的最小可定址單位通常為字或位元組,但記憶體管理單元 mmu,把虛擬位址轉換為實體地址的硬體裝置 通常以頁為單位處理。核心用struct page結構體表示每個物理頁,struct page結...
記憶體管理簡便複習總結
在virtual的知識裡摸爬滾打好幾天,最近大腦有些不夠用了,現在整理一下 非考慮記憶體對齊時各個結構的大致模型 至於考綠記憶體的在前面幾張已經敘述過了,為了方便,我再紙上畫了整體的流程,記憶體分配要注意對齊引數 min pack,最大位元組的型別 虛函式指標和虛函式表指標跨越的大小一定是對齊引數的...