Newsgroup: it.comp.lang.c++
Titolo: Efficienza temporale - cicli e dichiarazioni

Salve a tutti, sono uno studente che deve ottimizzare del codice come 
prima parte della tesi e mi seriva sapere due cosette:
1) in questi due casi, il tempo di esecuzione è migliore per uno dei due 
o non cambia niente?
	caso a) più cicli for
                 ...
                 for (int i;i<COST;i++) istruz. 1;
                 for (int j;i<COST;j++) istruz. 2;
                 for (int x;i<COST;x++) istruz. 3;
                 for (int y;i<COST;y++) istruz. 4;
                 for (int z;i<COST;z++) istruz. 5;
                 for (int w;i<COST;w++) istruz. 6;
                 ...
	caso b) un unico ciclo for con tutte le istruzioni
                 ...
                 for (int i;i<COST;i++) {
                     istruz. 1;
                     istruz. 2;
                     istruz. 3;
                     istruz. 4;
                     istruz. 5;
                     istruz. 6;
                 }
Tenendo conto le istruzioni vengono eseguite nello stesso tempo, io 
credo che in teoria il tempo di esecuzione è lo stesso nei due casi, ma 
in pratica come si comporta il calcolatore? (e con quale spiegazione)
2) Dichiarare una variabile all'interno di un ciclo fa "perdere tempo" 
rispetto al dichiararla fuori?
Esempio:
	caso a) for (int i=0; i<COST; i++) { ...; double c=...; ... }
	caso b) double c;
                 for (int i=0; i<COST; i++) {...; c=...; ...}
A me non interessa che la visibilità della variabile nei due casi sia 
diversa (col VC++6 tra l'altro non è neanche vero), voglio solo sapere 
se nel primo caso il ciclo con la dichiarazione "interna" ci mette più 
tempo rispetto all'altro caso. Secondo me il compilatore traduce le due 
cose nella stessa identica maniera quindi non ci dovrebbero essere 
differenze, e secondo voi?
Vi ringrazio da subito e vi saluto cordialmente.
Franco

                 for (int i=0; i<COST; i++) {...; c=...; ...}
Non ci dovrebero essere differenze con i tipi elementari, ma con oggetti 
dotati di costruttore ed eventualmente di distruttore, nel caso a 
l'oggetto viene costruito e distrutto ad ogni iterazione.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 Vi ringrazio da subito e vi saluto cordialmente.
Le ottimizzazioni sono cose strane... sicuramente è bene scrivere codice
corretto da subito, senza renderlo illeggibile con strani trucchi che spesso
pagano poco e controllare bene con un profiler dove il tuo programma passa
più tempo durante l'elaborazione.
ciao.

 Come regola generale, non c'e' una regola generale.
[cut]
Grazie, sei stato gentile ed esauriente, proprio quello che mi serviva :)
Franco

 più tempo durante l'elaborazione.
Per profiler cosa intendi? Io pensavo di fare delle prove usando il 
codice (l'orologio interno insomma), ci sono altri metodi migliori?
Franco

 codice (l'orologio interno insomma), ci sono altri metodi migliori?
Spesso il 90% del tempo si perde nel 5% del codice (anche meno), ma non
sempre è facile analizzare esattamente quello che succede.
Il profiler è un programma specializzato, in grado di analizzare il flusso
della computazione nel tuo programma. E' possibile quindi concentrarsi dove
veramente serve ed individuare le "strozzature computazionali".
Quasi sempre non c'è necessità di usare metodi così sofisticati e le
rilevazioni "a naso" (cronometro alla mano) possono anche andare... ma resta
lo strumento più importante quando bisogna "ottimizzare sul serio".

 veramente serve ed individuare le "strozzature computazionali".
Ok, capito. Se ne avessi bisogno, esistono di questi programmi 
scaricabili dalla rete legalmente che siano "free"?
Altrim mi tocca "cronometrare" :)
Grazie,
Franco

> Il profiler č un programma specializzato, in grado di analizzare il 

La suite del gcc e' completamente gratuita ed include gprof, un 
profiler, per l'appunto.
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://mbellett.web.cs.unibo.it/
Linux registered user 299762 @ Linux registered machine 213003

 profiler, per l'appunto.
Grazie per l'info, proverò quella :)
Franco

 Franco
-- 
Axel
Mods of Cropcirclecrew
Sezione Programmazione Domande/Risposte
http://www.cropcirclecrew.org/public/cccforum/index.php