猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
为什么我们使用volatile关键字?
我从未使用过它,但我想知道为什么人们会使用它?它到底是做什么的?我搜索了该论坛,发现只有C#或Java主题。
斯蒂芬大帝
浏览 448
回答 3
3回答
桃花长相依
考虑一下这段代码,int some_int = 100;while(some_int == 100){ //your code}当此程序被编译,编译器优化的代码,如果它认为,该方案从来没有能做出任何试图改变的价值some_int,所以它可能会倾向于优化while通过更改其循环while(some_int == 100)到的东西,相当于while(true)使执行可能很快(因为while循环中的条件似乎true总是存在)。(如果编译器未对其进行优化,则它必须some_int在每次迭代中获取的值并将其与100进行比较,这显然有点慢。)但是,有时(对程序的某些部分)进行优化可能是不可取的,因为可能是其他人正在some_int从编译器不知道的程序外部更改它的值,因为它看不到它。但这就是您设计的方式。在这种情况下,编译器的优化将无法产生预期的结果!因此,为了确保获得理想的结果,您需要以某种方式停止编译器优化while循环。这就是volatile关键字发挥作用的地方。您需要做的就是这个,volatile int some_int = 100; //note the 'volatile' qualifier now!换句话说,我将对此解释如下:volatile 告诉编译器,“嘿,编译器,我易变,而且,您甚至可以通过一些您甚至不知道的XYZ来更改我。XYZ可以是任何东西。也许是这个星球之外的某个外星人,称为程序。也许是一些照明,某种形式中断,火山等都可能使我突变。也许你永远都不知道谁会改变我!所以,你一无所知,不要再扮演一个全知的神,也不敢触摸我现在所在的代码。 ?好吧,这就是volatile防止编译器优化代码的方式。现在在网上搜索以查看一些示例示例。从C ++标准报价($ 7.1.5.1 / 8)[..] volatile是实现避免使用对象的积极优化的暗示, 因为对象的值可能会通过实现无法检测到的方式进行更改。[...]
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
C++
typedef入门问题
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续