Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top