volatile关键字是什么意思

我写了一段简单的对比代码并分别用vs2017以release方式编译然后用IDA观察汇编代码,如下图所示:

代码1

int a=5;

printf("%d",a)

代码2

volatile int a =5;

printf("%d",a);

 左边是代码1的汇编代码,右边是代码2的汇编代码。

左边由于 编译器发现a的值是5,然后printf里面有一个a,然后根据等量代换直接就把a的值设置为5了。其实这是一种优化手段,能执行一句代码为什么要执行两句代码呢,是吧。

右边由于给a加上了volatile关键字,就是告诉编译器不要把这个变量优化掉了,该从哪里取数据就从哪里取数据。由于5这个数是存放在了[ebp-4]这个地址开始的内存单元处,所以传递参数的时候也是直接把这个地址的数据给传递进去了。

所以volatile关键字的意思就是 ,教练,请不要优化我啊。

原文地址:https://www.cnblogs.com/yfish/p/9692356.html