c++ - 海湾合作委员会新协定的值(value)

标签 c++ gcc

我有一个与此类似的问题
gcc over-aligned new support (alignas )
所以我添加了-faligned-new编译器标志。

这修复了编译器警告。但是,当编译器使用--verbose标志运行时,我得到此输出https://pastebin.com/X2QZAtSb,其中最重要的行是

COLLECT_GCC_OPTIONS='-o' 'main' '-faligned-new=1' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64'

GCC手册(https://gcc.gnu.org/onlinedocs/gcc-9.3.0/gcc/C_002b_002b-Dialect-Options.html#C_002b_002b-Dialect-Options)指出:

新的
Enable support for C++17 new of types that require more
alignment than void* ::operator new(std::size_t) provides. 
A numeric argument such as -faligned-new=32 can be used to specify how much alignment 
(in bytes) is provided by that function, but few users will need to override 
the default of alignof(std::max_align_t).
-faligned-new=1是什么意思?如果我理解正确,则该值应等于8或16或其他值(默认为alignof(std::max_align_t)https://en.cppreference.com/w/cpp/types/max_align_t),而不是1。

要重现编译简单的main.cpp:
#include <iostream>

int main() {
    std::cout << "hello world\n";

    return 0;
}

使用g++ main.cpp -o main -faligned-new --verbose
我正在Debian系统上的GCC 9.3.0上编译程序,系统上的sizeof(max_align_t)是32。

最佳答案

What does -faligned-new=1 mean?



显然,这意味着-faligned-new的使用没有明确的阈值。

根据文档,在这种情况下,阈值默认为std::max_align_t的对齐方式。

关于c++ - 海湾合作委员会新协定的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62089698/

相关文章:

c++ - 是否有与 VS2008 或 Eclipse CDT 集成到 CPPUnit 的插件?

python - 任意 C 项目的预处理

c++ - cmake 和默认编译器

c++ - 在 Visual Studio 中调用 std::swap 时的 std::bad_function_call

c - 有没有办法打印调用我的 C 二进制文件的进程的 PID

c++ - 从具有一个已知输入参数和一个未知输入参数的函数构造 std::function

c++ - 如何在整数四面体中找到具有最小可能路径的最大和?

c++ - 在 C++ 中使用带有共享变量的 pthread 进行多线程

gcc - 为什么链接库的顺序有时会导致 GCC 出错?

c++ - 简单的 C++ 交换函数