亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我們使用volatile關鍵字?

為什么我們使用volatile關鍵字?

C++
斯蒂芬大帝 2019-11-21 10:41:42
我從未使用過它,但我想知道為什么人們會使用它?它到底是做什么的?我搜索了該論壇,發現只有C?;騄ava主題。
查看完整描述

3 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

考慮一下這段代碼,


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是實現避免使用對象的積極優化的暗示, 因為對象的值可能會通過實現無法檢測到的方式進行更改。[...]


查看完整回答
反對 回復 2019-11-21
  • 3 回答
  • 0 關注
  • 474 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號