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_1GB
和 MAP_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_1GB
和 MAP_HUGE_2MB
标志感到困惑。
谢谢!
Glibc 没有在其任何头文件中定义 MAP_HUGE_1GB
或 MAP_HUGE_2MB
。如果你安装了 kernel-headers
包,你可以通过 #include <linux/mman.h>
获得这些常量。不过,这并不是很理想,所以我不确定为什么 glibc 没有为您提供更好的获取方式。
我在 CentOS 7 上,内核版本为 3.10.0-1160.15.2.el7.x86_64.
当我尝试使用 MAP_HUGE_1GB
和 MAP_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_1GB
和 MAP_HUGE_2MB
标志感到困惑。
谢谢!
Glibc 没有在其任何头文件中定义 MAP_HUGE_1GB
或 MAP_HUGE_2MB
。如果你安装了 kernel-headers
包,你可以通过 #include <linux/mman.h>
获得这些常量。不过,这并不是很理想,所以我不确定为什么 glibc 没有为您提供更好的获取方式。