Рассмотрим этот пример кода:Когда можно полностью исключить изменчивую переменную?
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;
}
Без volatile
компилятор может оптимизировать на все переменные, так как они никогда не будут читаться.
Я думаю, что a
и b
можно оптимизировать, так как они полностью не используются, см. unused volatile variable.
Я думаю, что c
и d
не могут быть удалены с момента их написания, и записи на изменчивые переменные должны действительно произойти. e
должен быть эквивалентен c
.
GCC не оптимизирует f
, но также не дает инструкции для его написания. 50 задается в разделе данных. LLVM (clang) полностью удаляет f
.
Являются ли эти утверждения истинными?
- Изменчивую переменную можно оптимизировать, если она никогда не доступна.
- Инициализация статической или глобальной переменной не считается доступом.
Возможный дубликат [Почему волатильность необходима в c?] (Http://stackoverflow.com/questions/246127/why-is-volatile-needed-in-c) – Gopi
Я думаю, что этот вопрос более конкретен в отношении того, как изменчивые переменные могут быть оптимизированы. –
был 'c = 30;' предназначен для чтения 'd = 30;'? –