【发布时间】: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
【问题讨论】:
-
在 ubunto 18.04 上也试过
-
我改成
MAP_PRIVATE|MAP_ANONYMOUS成功了,这是为什么呢? -
developer.apple.com/library/archive/documentation/System/…
Conforming applications must specify either MAP_PRIVATE or MAP_SHARED. -
您可能应该将
sizeof(MyClass)乘以 300000 而不是相加。
标签: c++ memory malloc mmap errno