在Linux上,如果我达到malloc(1024 * 1024 * 1024)
,malloc实际上做什么?
我相信它会为分配分配一个虚拟地址(通过遍历空闲列表并在必要时创建一个新的映射),但它实际上会创建1Gib的交换页面吗?或者,当你真的像mmap
一样touch 页面时,它会缩小地址范围并创建页面吗?
(我之所以 Select Linux,是因为the standard没有提到这些细节,但我想知道其他平台也有哪些功能.)
在Linux上,如果我达到malloc(1024 * 1024 * 1024)
,malloc实际上做什么?
我相信它会为分配分配一个虚拟地址(通过遍历空闲列表并在必要时创建一个新的映射),但它实际上会创建1Gib的交换页面吗?或者,当你真的像mmap
一样touch 页面时,它会缩小地址范围并创建页面吗?
(我之所以 Select Linux,是因为the standard没有提到这些细节,但我想知道其他平台也有哪些功能.)
Linux执行延迟页面分配,又名"乐观内存分配".从malloc返回的内存没有任何支持,当你touch 它时,你可能会实际得到一个OOM条件(如果你请求的页面没有交换空间),在这种情况下为a process is unceremoniously terminated.
参见示例http://www.linuxdevcenter.com/pub/a/linux/2006/11/30/linux-out-of-memory.html