在 Mac OS X 和 Xcode 上使用 mmap 时,我遇到了错误:
使用未声明的标识符'MAP_POPULATE'
这段代码在另一台机器上可以工作。我该如何解决?
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