MAP_HUGE_1GB 和 MAP_HUGE_2MB 不见了?

MAP_HUGE_1GB and MAP_HUGE_2MB missing?

我在 CentOS 7 上,内核版本为 3.10.0-1160.15.2.el7.x86_64.

当我尝试使用 MAP_HUGE_1GBMAP_HUGE_2MB 标志时,g++-9.3.1 抱怨:

error: ‘MAP_HUGE_1GB’ was not declared in this scope; did you mean ‘MAP_HUGETLB’?

然后,我发现了这个,答案提示我需要“#define _GNU_SOURCE before #include <sys/mman.h> because this is a nonstandard flag”。

但是,定义 _GNU_SOURCE 会导致 warning: "_GNU_SOURCE" redefined 但 g++ 仍然抱怨未声明这两个标志。

然后,我发现了这个post,提示使用_GNU_SOURCE定义为libstdc++

现在,我对如何使用 MAP_HUGE_1GBMAP_HUGE_2MB 标志感到困惑。

谢谢!

Glibc 没有在其任何头文件中定义 MAP_HUGE_1GBMAP_HUGE_2MB。如果你安装了 kernel-headers 包,你可以通过 #include <linux/mman.h> 获得这些常量。不过,这并不是很理想,所以我不确定为什么 glibc 没有为您提供更好的获取方式。