使用未声明的标识符“MAP_POPULATE”

Sak*_*pta 5 c++ macos mmap

在 Mac OS X 和 Xcode 上使用 mmap 时,出现错误:

使用未声明的标识符“MAP_POPULATE”

相同的代码在另一台机器上运行。我该如何解决?

gui*_*ume 3

MAP_POPULATE仅在 Linux 上可用,并且仅自版本 2.5.46 起(自版本 2.6.23 起用于私有映射)。MAP_POPULATE用于减少页面错误的损失,因此您的代码应该能够在没有页面错误的情况下运行。下面是如何使用预处理器在不同机器上运行相同代码的示例。

#if __linux__
#include <linux/version.h>
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22)
#define _MAP_POPULATE_AVAILABLE
#endif
#endif

#ifdef _MAP_POPULATE_AVAILABLE
#define MMAP_FLAGS (MAP_PRIVATE | MAP_POPULATE)
#else
#define MMAP_FLAGS MAP_PRIVATE
#endif
Run Code Online (Sandbox Code Playgroud)