Windows具有VirtualAlloc,它允许您保留地址空间的连续区域,但实际上不使用任何物理内存。稍后,当您要使用它(或它的一部分)时,您再次调用VirtualAlloc来提交以前保留的页面的区域。
这实际上确实很有用,但是我最终希望将我的应用程序移植到linux-因此,如果以后无法移植,我就不想使用它。linux有办法吗?
编辑-用例
我正在考虑分配4 GB或类似的虚拟地址空间,但一次只能分配64K。这将为我提供一种零拷贝的方式来将阵列增长到4 GB。这很重要,因为典型的两倍数组大小和复制会为非常大的数组引入看似随机的,不可接受的延迟。
mmap一个特殊文件,例如/dev/zero(或使用MAP_ANONYMOUS)PROT_NONE,然后使用mprotect进行提交。
/dev/zero
PROT_NONE