Windows有VirtualAlloc,它允许您保留一个连续的地址空间区域,但实际上不使用任何物理内存.稍后,当您想要使用它(或其中的一部分)时,可以再次调用VirtualAlloc来提交之前保留页面的区域.

这实际上非常有用,但我希望最终将我的应用程序移植到linux——因此,如果以后无法移植,我不想使用它.linux有办法做到这一点吗?

EDIT - Use Case

我正在考虑分配4GB或类似的虚拟地址空间,但一次只分配64K.这将为我提供一种零拷贝的方式,将数组扩展到4GB.这一点很重要,因为对于非常大的数组来说,典型的数组大小和拷贝数加倍会带来看似随机的、不可接受的延迟.

推荐答案

mmap一个特殊文件,比如/dev/zero(或者使用MAP_ANONYMOUS)作为PROT_NONE,之后使用mprotect提交.

Linux相关问答推荐

使用Bash从文件名中删除日期名称

使用信号处理程序实现Hibernate 功能

如何在Linux下使用正则表达式更改文件名

为什么 linux shell diff 命令有时会显示与空行相关的输出,即使存在 -B(--ignore-blank-lines)选项?

需要获取文件名、行号、模式在文件中的匹配位置

如何使用 Linux 命令行跨子目录查找相似的文件名?

如何从 2 个文件中获取内容并使用 shell 脚本将该内容附加到新文件中

sed 根据文件中的条件进行多次替换

docker rm 命令在具有相同操作系统的不同机器上返回不同的状态码

在 Windows 上通过 SSH 运行 django 应用程序

函数在 shell 脚本中抛出错误语法错误:} unexpected

我可以阅读 Linux 内核的哪些部分以获得乐趣?

为什么我不能将 Unix Nohup 与 Bash For 循环一起使用?

在 Ubuntu 上运行自包含的 ASP.NET Core 应用程序

如何从任意 pthread_t 获取线程 ID?

命令行 Arduino 编译和上传?

rename() 是原子的吗?

如何从 Linux 内核模块的 init_module 代码创建设备 node ?

如何获取 GNU Makefile 中使用的 shell 命令的退出状态?

Linux 上 POSIX AIO 和 libaio 的区别?