Почему Clang не оптимизирует глобальный константный как #define?

Добавьте их в статическую карту внутри (this.getClass (). getName ()) конструктор родительских классов (или создайте по умолчанию), но это будет обновляться во время выполнения. Если ленивая инициализация - это вариант, вы можете попробовать этот подход.

4
задан JVApen 18 January 2019 в 14:51
поделиться

1 ответ

Это еще один случай, когда разница между C и C ++ имеет значение.

В C, const int FOO имеет внешнюю связь и, следовательно, должны быть включены в двоичную.

Вместо этого компиляция с g ++ или clang ++ дает вам желаемую оптимизацию, поскольку FOO имеет внутреннюю связь в C ++.

Вы можете достичь оптимизации в режиме C, явно запросив внутреннюю связь для FOO через

static const int FOO = 1;

И clang, и gcc с включенной оптимизацией по времени соединения (-flto) также удаляются. неиспользованный символ, даже если связь внешняя. (Live с и без LTO.)

0
ответ дан Baum mit Augen 18 January 2019 в 14:51
поделиться