Elo*_*off 33 linux memory-management virtualalloc
Windows具有VirtualAlloc,它允许您保留连续的地址空间区域,但实际上不使用任何物理内存.稍后当您想要使用它(或其中的一部分)时,再次调用VirtualAlloc以提交先前保留页面的区域.
这实际上非常有用,但我想最终将我的应用程序移植到linux - 所以如果我以后无法移植它,我不想使用它.linux有办法做到这一点吗?
编辑 - 用例
我正在考虑分配4 GB或一些这样的虚拟地址空间,但一次只能提交64K.这将为我提供一种零拷贝方式来生成高达4 GB的阵列.这一点很重要,因为典型的两倍数组大小和副本会为非常大的数组引入看似随机的不可接受的延迟.
您可以使用内核过量使用在系统范围内转换此功能.这通常是许多发行版的默认设置.
以下是http://www.mjmwired.net/kernel/Documentation/vm/overcommit-accounting的解释
VirtualAlloc()的 Linux 等效项是mmap(),它提供相同的行为。然而,正如评论者指出的那样,只要内存未初始化(例如通过calloc()或用户代码),连续内存的保留就是调用malloc()的行为。