使用未声明的标识符'MAP_POPULATE'

时间:2016-02-23 03:13:34

标签: c++ macos mmap

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

  

使用未声明的标识符'MAP_POPULATE'

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

1 个答案:

答案 0 :(得分:1)

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