Pasando argumentos a funciones con parámetros const: ¿es más rápido?
Considere, por ejemplo:
int sum(int a, int b)
{
return a + b;
}
contra
int sum(const int a, const int b)
{
return a + b;
}
¿Es el segundo enfoque en general más rápido?
Los parámetros de la función en C se copian y envían a la función, de modo que los cambios dentro de la función no afecten los valores originales. Mi razonamiento es que en el segundo.sum
Arriba, el compilador sabe con seguridad quea
yb
no se modifican dentro de la función, por lo que puede pasar los valores originales sin copiarlos primero. Por eso creo que el segundo.sum
Es más rápido que el primero. Pero realmente no lo sé. En el ejemplo simple particular desum
arriba, las diferencias, si las hay, deben ser mínimas.
Editar: lossum
El ejemplo es solo para ilustrar mi punto. No espero que en este ejemplo particular haya grandes diferencias. Pero me pregunto si en situaciones más complicadas laconst
El modificador dentro de un parámetro de función puede ser explotado por el compilador para hacer que la función sea más rápida. Dudo que el compilador siempre pueda determinar si un parámetro se cambia dentro de una función (de ahí mi segunda pregunta a continuación); por lo tanto yo esperaría que cuando encuentre unaconst
Modificador, hace algo diferente que cuando no hay.const
modificador
Pregunta: En general, una función será más rápida cuando sus argumentos sonconst
, que cuando no lo son?
Pregunta 2: En general, ¿puede un compilador de C (teóricamente) determinar siempre si un parámetro de función se cambia dentro de la función?