llamada de cola Considere el siguiente código:VS2010 C++ optimización
int fac_aux(int x, int res) {
if(x == 1) return res;
else return fac_aux(x - 1, res * x);
}
int fac(int x) {
return fac_aux(x, 1);
}
int main() {
int x = fac(50);
std::cout << x;
return 0;
}
Según genera el archivo asm todo está bien, está optimizado llamada de cola.
tratar de sustituir
int x = fac(50);
con
int x = fac_aux(50, 1);
lo suficientemente extraño, pero la optimización de llamada de cola se desaparecieron. Por lo que recuerdo, no había un comportamiento de compilación tan extraño en VS2008. ¿Alguna idea de por qué ocurren estas cosas y cómo asegurarse de que se haga una optimización de las llamadas finales?
; Indicadores de compilación de funciones:/Ogtp
Indicadores de optimización de ambos/O2 y/Ox. ¿Hay alguna otra opción de compilación que importe?
Editar: VS2012 se las arregla para hacer la optimización
al modificar su código, ¿eliminó la función 'fac'? – SirDarius
no, todavía estaba allí – Voivoid
por lo que la función que no se optimiza en realidad nunca se llama? ¿o estás hablando de la llamada final en la función puño? – Euqil