Работает ли встроенный C++ GCC без ключевого слова inline?
-
06-07-2019 - |
Вопрос
Пытается ли GCC при компиляции кода C++ оптимизировать скорость, выбирая встраивание функций, не отмеченных значком inline
ключевое слово?
Решение
Да.Любой компилятор может встроить любую функцию, когда сочтет это хорошей идеей.GCC тоже это делает.
На уровне оптимизации -O2 встраивание выполняется, когда компилятор считает, что это целесообразно (используется эвристика). и если это не увеличит размер кода.При -O3 это делается всякий раз, когда компилятор считает это целесообразным, независимо от того, приведет ли это к увеличению размера кода.Кроме того, на всех уровнях оптимизации (то есть включенной оптимизации) встраиваются статические функции, которые вызываются только один раз.
Другие советы
Да, особенно если у вас включен высокий уровень оптимизации.
Существует флаг, который вы можете предоставить компилятору для отключения этого: -fno-inline-functions.
Если вы используете '-finline-functions' или '-O3', они будут встроенными функциями. Вы также можете использовать '-finline_limit = N', чтобы настроить интенсивность встраивания.
"-O3 Эта опция включает более дорогие оптимизации, например, встраивание функций"
Да, это так, хотя он также сгенерирует тело без встроенных функций для не- статических
не- встроенных
функций, поскольку это необходимо для вызовов из другого перевода. ед. р>
Для функций inline
ошибочно не указывать тело функции, если функция используется в каком-либо конкретном модуле перевода, так что это не проблема.