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

5

在 Mac OS X 和 Xcode 上使用 mmap 时,我遇到了错误:

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

这段代码在另一台机器上可以工作。我该如何解决?

1个回答

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

在 Mac M1 上没有解决问题。 - Morteza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接