大家好,我是ST。
学C语言时,有一个奇怪的关键字volatile,这到底有什么用呢?
第一:volatile与编译器
首先,我们来看这样一段代码:
int busy = 1;
void wait() {
while(busy) {
;
}
}
编译一下,注意,这里使用O2优化:
下面,让我们仔细看看生成的这段汇编:
wait:
mov eax, DWORD PTR busy[rip]
.L2:
test eax, eax
jne .L2
ret
busy:
.long 1
其中L2这一段即为while循环,这段指令是经过编译器优化的,可以看到,决定能否跳出循环是通过检查寄存器eax来完成的,而