Sto cercando di mostrare con l'esempio che l'incremento del prefisso è più efficiente dell'incremento postfisso.i ++ meno efficiente di ++ i, come mostrare questo?
In teoria questo ha senso: i ++ deve essere in grado di restituire il valore originale non integrato e quindi memorizzarlo, mentre ++ i può restituire il valore incrementato senza memorizzare il valore precedente.
Ma c'è un buon esempio per mostrare questo in pratica?
ho provato il seguente codice:
int array[100];
int main()
{
for(int i = 0; i < sizeof(array)/sizeof(*array); i++)
array[i] = 1;
}
ho compilato utilizzando 4.4.0 gcc come questo:
gcc -Wa,-adhls -O0 myfile.cpp
ho fatto ancora una volta, con l'incremento suffisso cambiato in un incremento prefisso:
for(int i = 0; i < sizeof(array)/sizeof(*array); ++i)
Il risultato è codice di assemblaggio identico in entrambi i casi.
Questo era un po 'inaspettato. Sembrava che disattivando le ottimizzazioni (con -O0) dovrei vedere una differenza per mostrare il concetto. Cosa mi manca? C'è un esempio migliore per mostrare questo?
Il compilatore è abbastanza intelligente da dedurre che ++ i e i ++ produrranno lo stesso risultato nell'esempio del ciclo. Prova a utilizzare effettivamente il risultato assegnandolo a una variabile e calcolando qualcosa con esso, come un indice di array o qualcosa del genere. Ma oserei vedere differenze trascurabili. –
a proposito: sizeof (array)/sizeof (array [0]) ... sizeof (* array) = sizeof (int) – Artyom
Oops ... Risolto. Grazie Artyom. – cschol