Estoy tratando de mostrar con el ejemplo que el incremento de prefijo es más eficiente que el incremento de postfijo.i ++ menos eficiente que ++ i, ¿cómo mostrar esto?
En teoría, esto tiene sentido: i ++ necesita poder devolver el valor original no aumentado y, por lo tanto, almacenarlo, mientras que ++ i puede devolver el valor incrementado sin almacenar el valor anterior.
¿Pero hay un buen ejemplo para mostrar esto en la práctica?
He probado el siguiente código:
int array[100];
int main()
{
for(int i = 0; i < sizeof(array)/sizeof(*array); i++)
array[i] = 1;
}
He compilado usando GCC 4.4.0 de esta manera:
gcc -Wa,-adhls -O0 myfile.cpp
lo hice de nuevo, con el incremento de sufijo cambia a un incremento de prefijo:
for(int i = 0; i < sizeof(array)/sizeof(*array); ++i)
El resultado es un código de ensamblaje idéntico en ambos casos.
Esto fue algo inesperado. Parecía que al desactivar las optimizaciones (con -O0) debería ver una diferencia para mostrar el concepto. ¿Qué me estoy perdiendo? ¿Hay un mejor ejemplo para mostrar esto?
El compilador es lo suficientemente inteligente como para deducir que ++ i e i ++ producirían el mismo resultado en su ejemplo de bucle. Intente usar el resultado asignándolo a una variable y computando algo con él, como un índice de matriz o algo. Pero me atrevo a decir que verás diferencias insignificantes. –
por cierto: sizeof (array)/sizeof (array [0]) ... sizeof (* array) = sizeof (int) – Artyom
Vaya ... Reparado. Gracias Artyom. – cschol