#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[])
{
char *data = (char *)malloc(1024*1024*800);
//char *data = new char[1024*1024*800];
// memset(data, 0x01, 1024*1024*800);
while(1);
return 0;
}
如果完全不用的話,那這個其實內(nèi)核只是對這個進(jìn)程進(jìn)行了記賬,沒有真的直接給錢。這個開銷其實很小,小到大概實際支出只有十幾K而已,
你肯定要問,什么時候兌現(xiàn),這個就是在你讀或者寫到內(nèi)存的時候,而且是要用到多少才真的給,如你只用到20M的內(nèi)存,那其實真的分配的物理內(nèi)存也就比這個多一點(這當(dāng)然是虛擬內(nèi)存有管理的開銷)。這種模式在計算機領(lǐng)域很常見。如so加載,進(jìn)程啟動等等。
具體的內(nèi)容,你要看講虛擬內(nèi)存的書籍
malloc是用戶態(tài)的操作,內(nèi)核不知道的,內(nèi)核只提供了brk這種系統(tǒng)調(diào)用給你
malloc只分配虛擬內(nèi)存,只有到你用的時候才會有物理內(nèi)存給出來