#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;
}
如果完全不用的话,那这个其实内核只是对这个进程进行了记账,没有真的直接给钱。这个开销其实很小,小到大概实际支出只有十几K而已,
你肯定要问,什么时候兑现,这个就是在你读或者写到内存的时候,而且是要用到多少才真的给,如你只用到20M的内存,那其实真的分配的物理内存也就比这个多一点(这当然是虚拟内存有管理的开销)。这种模式在计算机领域很常见。如so加载,进程启动等等。
具体的内容,你要看讲虚拟内存的书籍
malloc是用户态的操作,内核不知道的,内核只提供了brk这种系统调用给你
malloc只分配虚拟内存,只有到你用的时候才会有物理内存给出来