Considerate questo esempio di codice:Quando è possibile ottimizzare completamente una variabile volatile?
int main(void)
{
volatile int a;
static volatile int b;
volatile int c;
c = 20;
static volatile int d;
d = 30;
volatile int e = 40;
static volatile int f = 50;
return 0;
}
Senza volatile
un compilatore potrebbe ottimizzare via tutte le variabili in quanto non sono mai leggere.
penso a
e b
può essere ottimizzato lontano dal momento che sono completamente inutilizzata, vedere unused volatile variable.
Penso che c
e d
non possano essere rimossi dal momento in cui sono stati scritti e le scritture in variabili volatili devono effettivamente verificarsi. e
dovrebbe essere equivalente a c
.
GCC non ottimizza via f
, ma anche non emette alcuna istruzione per scrivere. 50 è impostato in una sezione dati. LLVM (clang) rimuove completamente f
.
Queste affermazioni sono vere?
- Una variabile volatile può essere ottimizzata se non viene mai utilizzata.
- L'inizializzazione di una variabile statica o globale non viene considerata come accesso.
possibile duplicato di [Perché è volatile necessario in c?] (Http://stackoverflow.com/questions/246127/why-is-volatile-needed-in-c) – Gopi
Penso che questa domanda sia più specifica su come le variabili volatili possono essere ottimizzate. –
era 'c = 30;' intendeva leggere 'd = 30;'? –