2013-04-10 9 views
5

Sto scrivendo programma per ARM con ambiente Linux. suo non è un programma di basso livello, ad esempio il livello di appVolatile in C e Cpp in ambiente Linux

Mi può chiarire che cosa è la differenza tra,

int iData; 

vs

volatile int iData; 

vuol hanno impatto specifico hardware?

+2

Per non parlare di un [ancor più fondamentale approccio] (http://bit.ly/11RH6wk). – WhozCraig

risposta

-1

volatile in C nacque allo scopo di non memorizzare automaticamente i valori della variabile. Dirà alla macchina di non memorizzare nella cache il valore di questa variabile. Quindi prenderà il valore della variabile volatile data dalla memoria principale ogni volta che lo incontra. Questo meccanismo viene utilizzato perché in qualsiasi momento il valore può essere modificato dal sistema operativo o da qualsiasi interrupt. Quindi usare volatile ci aiuterà ad accedere ogni volta al valore di nuovo.

Leggi pagina Wiki e this maggiori spiegazioni

+0

Your ans sembra grande. grazie Jaguar .. Ho un altro dubbio, abbiamo bisogno di volatile in caso di una macchina non cache? –

+0

È necessario 'volatile' anche senza cache di memoria, una volta che si dispone di più di un registro nel processore. Perché la parola chiave 'volatile' dice anche al compilatore: non mantenere quel valore in un registro, sempre recuperarlo dalla memoria ... Ad esempio, i gestori di segnale spesso impostano un flag 'volatile sigatomic_t' ... –

+2

Scusa ma questo è errato, volatile non impedisce alla MACCHINA di memorizzare nella cache nulla. Impedisce al COMPILER di mantenere una variabile in un registro. In generale, disabilita CSE e un paio di altre ottimizzazioni per questa variabile. –