Помогает ли GCC при компиляции кода на С++ оптимизировать скорость, выбирая встроенные функции, которые не отмечены ключевым словом inline
?
Поддерживает ли GCC встроенный С++ без ключевого слова 'inline'?
Ответ 1
Да. Любой компилятор может свободно встраивать любую функцию всякий раз, когда думает, что это хорошая идея. GCC делает это также.
Уровень оптимизации -O2, вложение делается, когда компилятор считает, что это стоит делать (используется эвристика), и если он не увеличит размер кода. При -O3 это делается всякий раз, когда компилятор считает, что это стоит делать, независимо от того, увеличит ли размер кода. Кроме того, на всех уровнях оптимизации (включая оптимизацию), статические функции, которые вызывают только один раз, встраиваются.
Ответ 2
Да, особенно если у вас включен высокий уровень оптимизации.
Существует флаг, который вы можете предоставить компилятору для отключения этого: -fno-inline-functions.
Ответ 3
Если вы используете '-finline-functions' или '-O3', это будет встроенные функции. Вы также можете использовать '-finline_limit = N' для настройки того, сколько он делает.
Ответ 4
"- O3 Эта опция включает более дорогие оптимизации, , такие как функция inlining "
Ответ 5
Да, это так, хотя оно также генерирует неинтенсивное тело функции для функций static
non inline
, поскольку это необходимо для вызовов из других единиц перевода.
Для функций inline
ошибка не может обеспечить тело функции, если функция используется в какой-либо конкретной единицы перевода, поэтому это не проблема.