Рассмотрим, например:
int sum(int a, int b)
{
return a + b;
}
против.
int sum(const int a, const int b)
{
return a + b;
}
Является ли второй подход в целом быстрее?
Функциональные параметры в C копируются и отправляются в функцию, поэтому изменения внутри функции не влияют на исходные значения. Мое рассуждение состоит в том, что во втором sum
выше компилятор точно знает, что a
и b
не изменяются внутри функции, поэтому он может просто передать исходные значения, не скопировав их в первую очередь. Вот почему я думаю, что второй sum
быстрее первого. Но я действительно не знаю. В конкретном простом примере sum
выше различия, если они есть, должны быть минимальными.
Изменить: Пример sum
предназначен только для иллюстрации моей точки. Я не ожидаю, что в этом конкретном примере должны быть большие различия. Но мне интересно, может ли в более сложных ситуациях модификатор const
внутри параметра функции может быть использован компилятором, чтобы сделать функцию быстрее. Я сомневаюсь, что компилятор всегда может определить, изменяется ли параметр внутри функции (следовательно, мой второй вопрос ниже); поэтому я ожидаю, что когда он найдет модификатор const
, он сделает что-то другое, чем когда нет модификатора const
.
Вопрос: В общем случае функция будет быстрее, если ее аргументы const
, чем когда они не являются?
Вопрос 2: В целом, может ли компилятор C (теоретически) всегда определять, изменяется ли параметр функции внутри функции?