我在这里找到了这段代码块:
void work(int n) {
volatile int i=0; //don't optimize away
while(i++ < n);
}
void easy() { work(1000); }
void hard() { work(1000*1000*1000); }
int main() { easy(); hard(); }
...但是我不明白为什么需要使用volatile
关键字来修饰整数i
。(这就是整个程序。)我知道volatile
可以强制从主内存中读取i
的值,但在这种情况下,由于i
的值正在被程序本身更新,为什么编译器会认为其他方式是可以的(并优化掉while循环)?