我在我们的应用程序中使用mmap()作为:
mmap(NULL, get_size(), PROT_NONE, MAP_ANONYMOUS | MAP_SHARED, -1, 0);但我在这里的意图只是保留get_size()指定的内存量,但我并不打算使用它。有时我看到这个mmap()会因为ENOMEM而失败。问题是,当我们只是尝试保留地址空间,而不是实际使用它时,为什么在这里使用ENOMEM时mmap()会失败。是因为MAP_SHARED吗?
发布于 2020-02-19 18:14:08
在ulimit -v中,您可以看到进程的虚拟内存大小是有限制的。如果您达到了该限制,您可以尝试使用ulimit -v unlimited删除它。您还可以使用getrlimit/setrlimit POSIX函数以编程方式获取和设置限制。
系统默认和硬限制是在/etc/security/limits.d目录中的/etc/security/limits.conf和文件中设置的。
mmap因ENOMEM而失败的另一个原因是超出了由sysctl的vm.max_map_count配置选项控制的进程的最大内存映射数。
https://stackoverflow.com/questions/60295424
复制相似问题