Diciamo che il poster originale aveva un ciclo che desiderava davvero ottimizzare - ogni istruzione contava. Come possiamo capire - empiricamente - la risposta alla sua domanda?
gcc ha almeno un interruttore utile, se usato in modo non comune, '-S'. Scarica la versione del codice assembly del file .c e può essere utilizzato per rispondere a domande come le posizioni OP. Ho scritto un semplice programma:
int main()
{
int sum = 0;
for(int i=1;i<=10;++i)
{
sum = sum + i;
}
return sum;
}
e corse: gcc -O0 -std=c99 -S main.c
, creando la versione montaggio del programma principale. Ecco il contenuto della main.s (con alcuni dei fluff rimosso):
movl $0, -8(%rbp)
movl $1, -4(%rbp)
jmp .L2
.L3:
movl -4(%rbp), %eax
addl %eax, -8(%rbp)
addl $1, -4(%rbp)
.L2:
cmpl $10, -4(%rbp)
jle .L3
Non è necessario essere un esperto di assemblaggio per capire cosa sta succedendo. movl sposta valori, addl aggiunge oggetti, cmpl confronta e jle sta per 'salta se minore di', $ è per costanti. Sta caricando 0 in qualcosa - che deve essere 'somma', 1 in qualcos'altro - ah, 'i'! Un salto a L2 dove facciamo il confronto a 10, salta a L3 per fare l'add. Riempi fino a L2 per il confronto di nuovo. Neat! A per ciclo.
cambiare il programma per:
int main()
{
int sum = 0;
int i=1;
for(;i<=10;++i)
{
sum = sum + i;
}
return sum;
}
Eseguire nuovamente gcc e il gruppo risultante saranno molto simili. Ci sono alcune cose in corso con i numeri delle linee di registrazione, quindi non saranno identiche, ma l'assemblaggio finisce per essere lo stesso. Lo stesso risultato con l'ultimo caso. Quindi, anche senza ottimizzazione, il codice è quasi lo stesso.
Per divertimento, rieseguire gcc con '-O3' anziché '-O0' per abilitare l'ottimizzazione e guardare il file .s.
main:
movl $55, %eax
ret
gcc non solo capito che stavamo facendo un ciclo, ma anche rese conto che doveva essere eseguito un numero costante di volte ha fatto il circuito per noi al momento della compilazione, buttato fuori 'i' e 'sum' e ho codificato la risposta in modo sicuro - 55! È VELOCE, anche se un po 'forzato.
Morale della trama? Passa il tuo tempo a garantire che il tuo codice sia pulito e ben progettato. Codice per leggibilità e manutenibilità. I ragazzi che vivono su Mountain Dew e Cheetos sono molto più intelligenti di noi e si sono presi cura di molti di questi semplici problemi di ottimizzazione per noi. Divertiti!
Questo tipo di domanda è davvero un brutto segno ... –
+1 Per chiedere questo, solo così il mito può essere debuffato – Andres