Linux mmap与ENOMEM一起失败

Linux mmap与ENOMEM一起失败,linux,unix,mmap,Linux,Unix,Mmap,我在我们的应用程序中使用mmap(): mmap(NULL, get_size(), PROT_NONE, MAP_ANONYMOUS | MAP_SHARED, -1, 0); 但我的目的只是保留get_size()特定的内存量,但我不打算使用它。有时,我看到这个mmap()在ENOMEM中失败。问题是为什么mmap()在这里使用ENOMEM失败,而我们只是尝试保留地址空间,而不是尝试实际使用它。这是因为MAP\u SHARED?进程的虚拟内存大小有一个限制,您可以通过ulimit-v看

我在我们的应用程序中使用
mmap()

 mmap(NULL, get_size(), PROT_NONE,  MAP_ANONYMOUS | MAP_SHARED, -1, 0);

但我的目的只是保留
get_size()
特定的内存量,但我不打算使用它。有时,我看到这个
mmap()
在ENOMEM中失败。问题是为什么
mmap()
在这里使用
ENOMEM
失败,而我们只是尝试保留地址空间,而不是尝试实际使用它。这是因为
MAP\u SHARED

进程的虚拟内存大小有一个限制,您可以通过
ulimit-v
看到这个限制。如果达到该限制,可以尝试使用
ulimit-v unlimited
将其删除。您还可以使用POSIX函数以编程方式获取和设置限制

系统默认和硬限制在
/etc/security/limits.conf
和目录
/etc/security/limits.d
中的文件中设置



mmap
使用
ENOMEM
失败的另一个原因是超过了由
vm控制的进程的最大内存映射数。
sysctl
的max\u map\u count
配置选项对进程的虚拟内存大小有一个限制,可以通过
ulimit-v
看到。如果达到该限制,可以尝试使用
ulimit-v unlimited
将其删除。您还可以使用POSIX函数以编程方式获取和设置限制

系统默认和硬限制在
/etc/security/limits.conf
和目录
/etc/security/limits.d
中的文件中设置



mmap
使用
ENOMEM
失败的另一个原因是超过了由
vm控制的进程的最大内存映射数。
sysctl
的max\u map\u count
配置选项传递给
mmap
的大小是多少?使用
map-x
转储进程内存映射,并将其发布到此处。传递给
mmap
的大小是多少?使用
map-x
转储进程内存映射,并将其发布到此处。