linux - Linux 中是否有每个进程的最大连续页数?如果是这样,如何将其设置为无限?

以下代码会产生errno 12 cannot allocate memory

#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 %d\n", i, errno);
            getchar();
            return 1;
        }
        memset(p, 'A' + (i % 26), 0x1000);
    }
    return 0;
}

我的机器上的输出是 65510 12

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

回答1

似乎将 /proc/sys/vm/max_map_count 设置为更大的数字可以解决问题。参考:https://stackoverflow.com/questions/11683850/how-much-memory-could-vm-use

相似文章

随机推荐

最新文章