Работает ли GCC inline C++ без ключевого слова inline?

GCC, когда компилирует код C++, когда-либо пытается оптимизировать скорость, выбирая встроенные функции, которые не отмечены inline ключевое слово?

5 ответов

Решение

Да. Любой компилятор может встроить любую функцию, когда считает, что это хорошая идея. GCC делает это также.

На уровне оптимизации -O2 встраивание выполняется, когда компилятор считает, что это стоит делать (используется эвристика), и если это не приведет к увеличению размера кода. В -O3 это делается всякий раз, когда компилятор считает, что это стоит делать, независимо от того, увеличит ли он размер кода. Кроме того, на всех уровнях оптимизации (то есть включенной оптимизации) статические функции, которые вызываются только один раз, являются встроенными.

Да, особенно если у вас включен высокий уровень оптимизации.

Есть флаг, который вы можете предоставить компилятору для отключения этого: -fno-inline-functions.

Если вы используете '-finline-functions' или '-O3', это встроит функции. Вы также можете использовать '-finline_limit=N', чтобы настроить, сколько делает встраивание.

Да, это так, хотя он также сгенерирует не встроенное тело функции дляstatic не-inline функции, так как это необходимо для звонков из других единиц перевода.

За inline функции, это ошибка, если вы не можете предоставить тело функции, если функция используется в каком-либо конкретном модуле перевода, так что это не проблема.

"-O3 Эта опция включает более дорогие оптимизации, такие как встраивание функций"

Другие вопросы по тегам