Значение -faligned-new в GCC - PullRequest
1 голос
/ 29 мая 2020

У меня была проблема, похожая на эту g cc перевыровненная новая поддержка (alignas) поэтому я добавил -faligned-new флаг компилятора.

Это исправило предупреждение компилятора. Однако, когда компилятор запускается с флагом --verbose, я получаю этот вывод https://pastebin.com/X2QZAtSb, в котором самая важная строка -

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

G CC manual (https://gcc.gnu.org/onlinedocs/gcc-9.3.0/gcc/C_002b_002b-Dialect-Options.html#C_002b_002b -Dialect-Options ) утверждает, что:

-faligned-new

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.

Для воспроизведения compile simple main. cpp:

#include <iostream>

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

    return 0;
}

с использованием g++ main.cpp -o main -faligned-new --verbose

Я компилирую программу на G CC 9.3.0, в системе Debian, sizeof(max_align_t) - 32 в моей системе.

1 Ответ

1 голос
/ 29 мая 2020

Что означает -faligned-new = 1?

По-видимому, это означает, что -faligned-new использовался без явного порога.

Согласно документации, В данном случае порог по умолчанию равен std::max_align_t.

...