linux user group brescia

immagine del castello

Archivio della mailing list

Troppo ottimizzato!

Luca Giuzzi giuzzi a lugbs.linux.it
Mer 21 Maggio 2003 12:43:30 UTC
On Tue, May 20, 2003 at 05:49:47PM +0200, Enrico Colombini wrote:
> 
> On Monday 19 May 2003 18:17, Vernia Damiano wrote:
> > Posso capire che lui veda un "var" che non puo' cambiare 
> 
> Prova con:
> volatile int var = 1;
> 
Concordo appieno con la soluzione proposta da Erix.
I qualificatori di tipo servono proprio per controllare l'ottimizzazione
ove il compilatore (di suo) potrebbe commettere degli errori.

"volatile" in particolare, vedi K&R Appendix A 8.2, serve a
"sopprimere ottimizzazioni che potrebbero altrimenti accadere [...]
ad esempio [...] al fine di evitare che il compilatore rimuova
referenze apparentemente ridondanti".

Concretamente: non e' mai piacevole scoprire che il codice compilato
 con -O si comporta in modo diverso da quello compilato con -O2
 (ma se ci sono diversi livelli di ottimizzazione un motivo c'e' :)) )
 ma nel caso concreto non imputerei il tutto ad un baco di gcc, ma
 ad una ambiguita' di fondo.
 [la domanda che uno puo' porre e'... lo standard C cosa dice...
 nel caso specifico assolutamente nulla, in quanto il controllo viene
 passato ad una procedura non locale (il signal handler) che dipende
 dall'host... nel dubbio prenderei il codice "non ottimizzato" come
 quello valido]

 Come regola `generica' mi sentirei di suggerire di dichiarare sempre
 come "volatile" le variabili che possono essere modificate da una
 procedura esterna. 

Ciao,
 lg

-- 



Maggiori informazioni sulla lista Lug