Чтобы заставить функцию не быть встроенной, которая потребляла 46% времени выполнения, я использовал __attribute__((noinline))
для нее и скомпилировал код с gcc -Wall -Winline -O2
(эти плюс -g
- это то, что используется Makefile - я также вижу примерно такой же эффект при использовании -g
) при использовании gcc 4.5.2. Я обнаружил, что программа с не встроенной функцией более чем на 20% быстрее оригинальной. Кто-нибудь знает, почему это может быть?
Позвольте мне предоставить более подробную информацию. Программа, в которой это произошло, является последней версией утилиты сжатия bzip2 для Linux. Ключевая функция (generateMTFValues находится в compress.c) в программе - это та, которая выполняет преобразование «Переместить в фронт». Эта функция вызывается только одной функцией в программе.
Кто-нибудь знает, почему программа работает быстрее в этом случае, заставляя компилятор не включать эту функцию? Функция принимает только один параметр - указатель на структуру, которая содержит всю информацию о блоке и сжатии. Кроме того, он вызывает только одну другую функцию, которая не требует значительного времени на обработку.