статическая функция быстрее? - PullRequest
2 голосов
/ 12 февраля 2010

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

Ответы [ 3 ]

4 голосов
/ 12 февраля 2010

Если ваша функция вызывается из той же единицы перевода, в которой она определена (что, очевидно, требуется для static функций), компиляторы уже могут легко встроить такие вызовы независимо от того, объявлена ​​ли функция static или нет.

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

4 голосов
/ 12 февраля 2010

Это теоретически может. Однако в то же время некоторые современные компиляторы могут выполнять так называемые «глобальные оптимизации», которые основаны на анализе взаимосвязей между кодом между единицами перевода. Это может включать анализ всех сайтов вызовов для данной функции во всей программе (в отличие от одного модуля перевода) и, возможно, распространить такую ​​оптимизацию и на нестатические функции.

2 голосов
/ 12 февраля 2010

Это может сделать компилятор более охотно встроенным, да. Но, как всегда, это зависит от компилятора. Вы должны проверить и проверить выходную сборку, чтобы быть уверенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...