Если у вас узкое место в рекурсивной функции, и если предположить, что уровень рекурсии не минимален (т.е. средняя рекурсия не просто несколько уровней), вам лучше работать с алгоритмом в функции, а не с встраивание .
Попробуйте, если возможно, преобразовать рекурсию в цикл или хвостовую рекурсию (которая может быть неявно преобразована в цикл компилятором), или попытайтесь определить, где в функции указана стоимость тратится. Постарайтесь свести к минимуму влияние внутренних операций (возможно, вы динамически выделяете память, которая может иметь длительность автоматического хранения, или, возможно, вы можете выделить обычную операцию, выполняемую вне функции в оболочке и передаваемую в качестве дополнительного аргумента.) ..)
* РЕДАКТИРОВАТЬ после комментария о том, что рекурсия не предназначена, а скорее итерация *
Если у компилятора есть доступ к определению функции, он в большинстве случаев примет правильное решение. Если у него нет доступа к определению, просто переместите код, чтобы он его увидел. Возможно, сделайте функцию функцией static
, чтобы обеспечить дополнительный намек на то, что она не будет использоваться где-либо еще, или даже пометьте ее как inline
(зная, что это не приведет к принудительному встраиванию), но избегайте использования специальных атрибутов, которые будут force встраивание, поскольку компилятор, вероятно, делает это лучше, чем любая простая эвристика, которую можно создать, не глядя на код.