GCC 中 -faligned-new 的值
Posted
技术标签:
【中文标题】GCC 中 -faligned-new 的值【英文标题】:Value of -faligned-new in GCC 【发布时间】:2020-05-29 15:41:36 【问题描述】:我遇到了与此类似的问题
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) 指出:
-faligned-新
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
我正在 GCC 9.3.0 上编译程序,在 Debian 系统上,sizeof(max_align_t)
在我的系统上是 32。
【问题讨论】:
【参考方案1】:-faligned-new=1 是什么意思?
显然,这意味着-faligned-new
没有明确的阈值。
根据文档,在这种情况下,阈值默认为std::max_align_t
的对齐方式。
【讨论】:
这是合理的。但是我希望编译器报告的这个标志的值将是sizeof(std::max_align_t)
(在我的例子中:=32
)。如果 GCC 使用默认值,你有没有真正输出 some_flag_name=1
的任何来源?
@Dinuirar 您的演示是一个来源。您没有指定值,--verbose
显示 1。以上是关于GCC 中 -faligned-new 的值的主要内容,如果未能解决你的问题,请参考以下文章
如何将内存中某个地址的值复制到 gcc AT&T 样式的寄存器中