Приводят ли константные примитивные типы в параметрах функции к значительному увеличению производительности? - PullRequest
7 голосов
/ 18 июня 2011

Друг сказал мне, что более эффективно сделать

int addNumbers(const int number1, const int number2);

чем

int addNumbers(int number1, int number2);

при условии, конечно, что number1 и number2 не будут назначены новые значения. Приводит ли это к значительному повышению производительности? Есть ли другие побочные эффекты, о которых я должен знать?

Ответы [ 5 ]

11 голосов
/ 18 июня 2011

const correctness - это больше, чем позволить компилятору помочь вам избежать честных ошибок.Объявление константности параметра - это просто еще одна форма безопасности типов, а не повышение производительности.

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

8 голосов
/ 18 июня 2011

Надеюсь, вы знаете, что с точки зрения объявлений функций эти два идентичны , то есть они объявляют одну и ту же функцию !!!

Теперь, какЧто касается определений, я не могу сказать, есть ли какое-либо усиление вообще, но я могу обещать вам, что значительного повышения нет.Я не верю, что современные компиляторы глупы.Большинство из них умнее вас и меня.))

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

0 голосов
/ 18 июня 2011

Возможно, вы думаете о чем-то вроде этого:

void foo(vector<int> large_object)

против

void foo(const vector<int>& large_object)

Второй случай может быть быстрее, потому что компилятор будет помещать ссылку только в стек.В первом случае весь вектор будет сдвинут.

0 голосов
/ 18 июня 2011

В лучшем случае это будет микрооптимизация; в худшем случае.

Не думайте о подобных идеях.

Если вы не собираетесь менять значение, используйте const. И двигаться дальше.

0 голосов
/ 18 июня 2011

Это, вероятно, зависит от компилятора и характера функции, поэтому на самом деле нет места для оптимизации.Если вы думаете о работе компилятора, когда выбираете, когда использовать регистры ЦП и какую команду загрузки использовать, я не могу найти ни одного случая использования, когда знание того, что параметр является константным, позволит компилятору оптимизировать код.

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

void addNumbers(const int num1, const int num2)
{
    ...
    num1++;   // you really didn't mean to do this!
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...