Для меня с оптимизацией GCC 4.2.1 при -O3
нет разницы во времени выполнения между встроенной функцией и макросом. В любом случае это 0,185 с, и я серьезно сомневаюсь, что мой ноутбук в 10 раз быстрее вашей машины.
Запуск g++ -S
дополнительно показывает, что объектный код идентичен.
Я настроил int L
и int R
на volatile int
, чтобы заставить его фактически выполнить цикл.
Редактировать: Цель более низких настроек оптимизации - помочь отладке. Одна из причин, по которой встроенная функция может быть медленнее на -O0
, заключается в том, что компилятор гарантирует, что все переменные находятся в согласованном состоянии, которое вы можете остановить и посмотреть в отладчике, на строку кода внутри встроенной функции.
Иногда оптимизация делает невозможным разрыв внутри или пошаговое выполнение встроенной функции, подобно макросу.