C语言 Linux中每个进程是否有连续页面的最大数量?如果是,如何设置为无限制?



下面的代码将生成errno 12无法分配内存

#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <memory.h>
#include <errno.h>
int main()
{
char* p;
for (size_t i = 0; i < 0x10000; i++)
{
char* addr = (char*)0xAAA00000000uL - i * 0x2000;
p = mmap(addr, 0x1000,
PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (p != addr) {
printf("%lu %dn", i, errno);
getchar();
return 1;
}
memset(p, 'A' + (i % 26), 0x1000);
}
return 0;
}

在我的机器上输出是65510 12

但是,如果我们将每个页的大小从0x1000更改为0x2000,则分配将成功,即使它使用了更多的内存。我认为唯一的区别是连续页面的数量,这有限制吗?如果是,如何设置为无限制?

似乎将/proc/sys/vm/max_map_count设置为较大的数字可以解决问题。参考:vm可以使用多少内存

相关内容

最新更新