記憶體管理
什麼是記憶體?
記憶體是一種稀缺資源。
linux程式不允許直接訪問物理記憶體,都通過虛擬記憶體的方式訪問。
實體地址
虛擬位址
linux通過核心的」儲存管理」,給使用者提供了」虛擬記憶體」。
虛擬記憶體可以比實際的物理記憶體大。
記憶體分配
1)簡單的記憶體分配
使用malloc
以位元組為單位進行分配
返回乙個虛擬記憶體位址。
返回的型別是void *, 需要進行型別轉換。
注: int *buff = malloc(1024);
//在賦值時,進行了自動型別轉換
//建議進行顯式型別轉換:int buff = (int)malloc(1024);
不能對void*型別的指標直接讀寫。
對void*型別指標進行訪問時,需要先進行型別轉換。
例項:main1.c
分配大量的記憶體
可以使用malloc分配大塊的記憶體。
malloc能分配的記憶體總量可以比實際物理記憶體大。
例項:main2.c
當物理記憶體快耗盡時,linux將使用「交換空間」
交換空間是當安裝linux系統時分配的乙個磁碟空間。
linux把物理記憶體中的某些頁「搬」到交換空間中,以得到更大的物理記憶體。
當物理記憶體和交換空間都耗盡時,linux核心則把該應用程式「殺死」。
例項:main3.c
記憶體的惡意使用
當非法使用記憶體時,將產生「段錯誤」
例項: main4.c
空指標的使用
linux不允許訪問空指標。
例項:main5.c
記憶體的釋放
free的引數,必須是malloc(或calloc/realloc)返回的指標!
例項:main6.c
其他分配函式
calloc
realloc
Linux記憶體管理
本文首先介紹一下linux記憶體管理方式,著重說明一下使用者空間的記憶體管理,包括linux虛擬對映以及glibc中malloc的實現 然後簡要介紹單程序多執行緒的記憶體管理方式,主要涉及各執行緒堆疊空間的分配 linux 採用兩級保護機制,隔離核心空間和使用者程式空間,使使用者程式無法直接訪問核心...
Linux記憶體管理
本文首先介紹一下linux記憶體管理方式,著重說明一下使用者空間的記憶體管理,包括linux虛擬對映以及glibc中malloc的實現 然後簡要介紹單程序多執行緒的記憶體管理方式,主要涉及各執行緒堆疊空間的分配 linux採用兩級保護機制,隔離核心空間和使用者程式空間,使使用者程式無法直接訪問核心,...
Linux記憶體管理
首先我要說,我這是轉貼,轉的cu論壇上 nonameboy 的帖子,你可以連線過去看看。今天因為要解釋系統中可用記憶體的大小,用google看了半天,還有在cu上找了關天,竞然沒有發現有比較好的章,估計很多人都沒有注意到,懂了以後又沒有整理出來。在cu上看了很多文章說什麼memory leak和li...