如何解决mmap() 分配因大数而失败?
在 macOS Big-Sur 上使用 32GB 内存,其中 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
解决方法
符合要求的应用程序必须指定 MAP_PRIVATE 或 MAP_SHARED。
Linux 也有类似的限制:
此行为是通过在标志中准确包含以下值之一来确定的
MAP_SHARED
MAP_SHARED_VALIDATE
MAP_PRIVATE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。