小编典典

malloc是否在Linux(和其他平台)上懒惰地为分配创建后备页面?

linux

在Linux上,如果我愿意malloc(1024 * 1024 * 1024),malloc实际上是做什么的?

我确定它会为分配分配一个虚拟地址(通过遍历空闲列表并在必要时创建新的映射),但是它实际上是否创建了1
GiB的交换页?还是mprotect当您实际触摸它们时就创建地址范围并创建页面mmap

(我之所以指定Linux,是因为该标准在这些细节上没有任何说明,但是我很想知道其他平台也可以这样做。)


阅读 296

收藏
2020-06-02

共1个答案

小编典典

Linux确实也推迟了页面分配。“乐观的内存分配”。从malloc取回的内存没有任何内容,当您触摸它时,您实际上可能会遇到OOM条件(如果您请求的页面没有交换空间),在这种情况下,进程会异常终止

参见例如http://www.linuxdevcenter.com/pub/a/linux/2006/11/30/linux-out-of-
memory.html

2020-06-02