0
我創建了使用malloc()分配50Mb內存的小波包程序,然後使用一個循環來「觸摸」每一頁以使其處於居住狀態。過程中的駐留內存不斷增加但沒有主要頁面錯誤
int main()
{
// Map 50M to RAM
unsigned char *p = malloc(52428800);
sleep(5);
// Touch every page
for (int i = 0; i< 52428800; i+=4096)
p[i] = 1;
sleep(100000);
}
事實上,程序似乎工作,這意味着前5秒的睡眠後,在「靠前指揮」開始輸出的駐留內存填滿並最終分配所有虛擬內存RAM。
PID %MEM VIRT RES CODE DATA SHR
32486 0.6 55396 52360 4 51528 1104
我注意到程序的頁面錯誤而只有較小的差異:
ps -ef -o min_flt,maj_flt 32486
MINFL MAJFL
12879 0
不應該有大的頁面錯誤?據我瞭解,當我使用malloc()時,創建了一個50Mb的虛擬地址空間。在每個虛擬頁面上寫入之前,實際的居所大小非常小,但是之後等於所請求的虛擬內存。
當我「觸摸」頁面(爲了讓它們居住),那麼每個頁面從磁盤移動到DRAM,對吧?爲什麼沒有主頁錯誤呢?
此外,當你malloc()爲50米,你注意到在住宅的大小,只有幾個字節,其餘的頁面在哪裏?他們在磁盤上?