我很难找到有关 GCC 的对齐新警告和 gcc -faligned-new 选项的更多信息。在 gcc 7.2.0 上编译(没有 --std=c++17)并尝试定义一个对齐的结构,例如:
struct alignas(64) Foo { int x; }
只是做一个简单的旧:
Foo * f = new Foo();
给我以下警告和建议:
alignas.cpp:36:25: warning: ‘new’ of type ‘Foo’ with extended alignment 64 [-Waligned-new=]
Foo * f = new Foo();
^
alignas.cpp:36:25: note: uses ‘void* operator new(long unsigned int)’, which does not have an alignment parameter
alignas.cpp:36:25: note: use ‘-faligned-new’ to enable C++17 over-aligned new support
我知道默认情况下new
只会返回对齐到alignof( std::max_align_t )
(对我来说是 16)的内存,但我不清楚的是,如果我通过 -faligned-new,gcc 现在会new
代表我强制执行正确的新对齐吗?
不幸的是,这方面的 gcc 文档非常缺乏。