Inserendo un'istruzione di stampa all'interno del ciclo for, si stanno sacrificando alcune prestazioni.
Poiché il programma deve eseguire una chiamata di sistema per scrivere l'output sullo schermo ogni volta che il messaggio viene stampato, richiede tempo alla CPU lontano dal programma stesso.
si può vedere la differenza di prestazioni tra queste due loop:
int i;
printf("Start Loop A\n");
for(i = 0; i < 100000; i++) {
printf("%d ", i);
}
printf("Done with Loop A\n");
printf("Start Loop B\n");
for(i = 0; i < 100000; i++) {
// Do Nothing
}
printf("Done with Loop B\n");
vorrei includere il codice tempi, ma sono nel bel mezzo di lavoro e può aggiornare in un secondo momento durante il pranzo.
Se la differenza non è visibile, è possibile aumentare il numero da 100000 a un numero maggiore (anche se un numero troppo grande farebbe sì che il primo ciclo impieghi troppo tempo per completare).
Whoops, ho dimenticato di finire la mia risposta.
Per ridurre il numero di chiamate di sistema che il programma deve eseguire, è possibile innanzitutto controllare una condizione e stampare solo se tale condizione è vera.
Ad esempio, se si contavano come nel mio codice di esempio, si poteva solo stampare tutti i numeri 100 ° utilizzando %
:
int i;
for(i = 0; i < 100000; i++) {
if(i%100 == 0)
printf("%d", i);
}
che ridurrà il numero di chiamate di sistema da ~ 100000 a ~ 1000 , che a sua volta aumenterebbe le prestazioni del ciclo.
fonte
2013-07-02 13:40:27
comunque alla fine lo rimuovi no? – Alexis
Perché fai '/ 1000'? Direi che 'i% large_n' dovrebbe essere sufficiente per questo. –
Perché ti preoccupi delle prestazioni per qualcosa che usi solo nei build di debug e di sviluppo? –