Passando argumentos para funções com parâmetros constantes: é mais rápido?
Considere, por exemplo:
int sum(int a, int b)
{
return a + b;
}
vs.
int sum(const int a, const int b)
{
return a + b;
}
A segunda abordagem é geralmente mais rápida?
Os parâmetros de função em C são copiados e enviados para a função, para que as alterações dentro da função não afetem os valores originais. Meu raciocínio é que no segundosum
acima, o compilador sabe com certeza quea
eb
não são modificados dentro da função, por isso pode apenas passar os valores originais sem copiá-los primeiro. É por isso que eu acho que o segundosum
é mais rápido que o primeiro. Mas eu realmente não sei. No exemplo simples particular desum
acima, as diferenças, se houver, devem ser mínimas.
Editar: osum
exemplo é apenas para ilustrar o meu ponto. Eu não espero que neste exemplo em particular haja grandes diferenças. Mas eu me pergunto se em situações mais complicadasconst
Um modificador dentro de um parâmetro de função pode ser explorado pelo compilador para tornar a função mais rápida. Eu duvido que o compilador sempre possa determinar se um parâmetro é alterado dentro de uma função (daí a minha segunda questão abaixo); daqui eu esperaria que quando encontra umconst
modificador, faz algo diferente do que quando não háconst
modificador.
Questão: Em geral, uma função será mais rápida quando seus argumentos foremconst
, do que quando eles não são?
Questão 2: Em geral, um compilador C (teoricamente) pode sempre determinar se um parâmetro de função é alterado dentro da função?