大数字时 mmap() 分配失败?

mmap() Allocation Fails With Large Numbers?

在 macOS Big-Sur 上使用 32GB 的 Ram,其中 24+ 是免费的我 运行 以下程序:

void *void_new_block = mmap(nullptr, sizeof(MyClass) + 300000, PROT_READ | PROT_WRITE, MAP_ANONYMOUS, -1,
                            0);
if (void_new_block == (void *) (-1)) {
    std::cout << strerror(errno) << std::endl;
    return nullptr;
}

但是 mmap 一直失败,我在屏幕上看到以下消息:

Invalid argument

出现这种运行ge 行为的原因是什么?

另外,sizeof(MyClass) = 48

根据 documentation:

Conforming applications must specify either MAP_PRIVATE or MAP_SHARED.

Linux也有类似的限制:

This behavior is determined by including exactly one of the following values in flags

MAP_SHARED

MAP_SHARED_VALIDATE

MAP_PRIVATE