【问题标题】:mmap() Allocation Fails With Large Numbers?mmap() 分配因大数而失败?
【发布时间】:2021-06-25 21:52:40
【问题描述】:

在 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

这种奇怪行为的原因是什么?

另外,sizeof(MyClass) = 48

【问题讨论】:

标签: c++ memory malloc mmap errno


【解决方案1】:

根据documentation

符合要求的应用程序必须指定 MAP_PRIVATE 或 MAP_SHARED。

Linux 有类似的限制:

此行为是通过在标志中包含以下值之一来确定的

MAP_SHARED

MAP_SHARED_VALIDATE

MAP_PRIVATE

【讨论】:

  • 你能解释一下它们的含义以及我们为什么需要它们吗?
  • 顺便说一句,我喜欢你的 youtube 频道 :)
  • @pow 我自己从来没有使用过它们,我建议阅读他们都在那里解释的手册页
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 2015-10-21
  • 2013-01-11
  • 2019-09-19
相关资源
最近更新 更多