關(guān)鍵字 volatile

volatile是一個(gè)和和const對(duì)應(yīng)的修飾符號(hào). 表示這個(gè)變量可能被某種不被編譯器控制的因素修改.比如操作系統(tǒng),硬件和其他的線程.遇到這個(gè)關(guān)鍵字,則編譯器對(duì)于關(guān)聯(lián)這個(gè)變量的代碼將不做優(yōu)化,從而提供對(duì)特殊地址的穩(wěn)定訪問(wèn).聲明語(yǔ)法為:int volatile vInt.
編譯器遇到變量vInt 的時(shí)候,即使剛剛訪問(wèn)過(guò)這個(gè)變量,編譯器仍然對(duì)這個(gè)變量的初始內(nèi)存地址進(jìn)行訪問(wèn),因?yàn)檫@個(gè)變量可能是時(shí)時(shí)變化的.
比如在程序中插入了一段匯編代碼而編譯器并不知道,此時(shí)對(duì)于訪問(wèn)的變量可以加上volatile 修飾符.
一般有三個(gè)地方需要使用這個(gè)修飾符:

  1. 多任務(wù)環(huán)境下任務(wù)共享的標(biāo)志
  2. 硬件寄存器的訪問(wèn)
  3. 程序中供其他程序檢測(cè)的變量.

volatile 指針
const類似,volatile也有指針變量和變量指針兩說(shuō).

  • 對(duì)象,數(shù)據(jù)是const或者volatile
const char* cpch
volatile char* vpch
  • 指針本身(一個(gè)整型變量)是const或者volatile
char* const pchc;
char* volatile pchv;

可以把一個(gè)非volatile int賦值給volatile int,但是對(duì)象不行

多線程下的 volatile
兩個(gè)線程共用一個(gè)變量的時(shí)候,這個(gè)變量必須要用volatile修飾,以防止編譯器優(yōu)化,將寄存器中緩存的變量直接裝入CPU 寄存器中.
volatile保證了編譯器每次都能直接從內(nèi)存地址中直接訪問(wèn)某個(gè)變量,而不是從寄存器中. 保證了一些共享的標(biāo)志位等數(shù)據(jù)的實(shí)時(shí)更新.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一. volatile是什么? volatile關(guān)鍵字是一種類型修飾符,對(duì)于用它聲明的類型變量,編譯器對(duì)訪問(wèn)該變量...
    安然_fc00閱讀 571評(píng)論 0 0
  • 注:這是第三遍讀《C語(yǔ)言深度解剖》,想想好像自從大學(xué)開始就沒讀完過(guò)幾本書,其中譚浩強(qiáng)的那本《C語(yǔ)言程序設(shè)計(jì)(第四版...
    HavenXie閱讀 1,917評(píng)論 1 6
  • 今晚0點(diǎn)就元旦了,一年過(guò)得好快啊,一轉(zhuǎn)眼走到年底了,考試,是我最大的煩惱啦。每當(dāng)達(dá)到考試,我就很擔(dān)心,因?yàn)?,?..
    longerandfaster閱讀 396評(píng)論 2 4
  • (根據(jù)夢(mèng)改編) 一天下雨,小王的父母打電話給生活拮據(jù)的鄰居老張,讓他把晾在外面的衣服幫忙收進(jìn)家中,并告訴他鑰匙就...
    不會(huì)說(shuō)話的CAT閱讀 318評(píng)論 1 1
  • 獲取倒計(jì)時(shí)之前,我們不妨先來(lái)看怎樣獲取當(dāng)前時(shí)間吧!??! 獲取倒計(jì)時(shí) 1、實(shí)現(xiàn)倒計(jì)時(shí)功能2、倒計(jì)時(shí)結(jié)束按鈕可被點(diǎn)擊,...
    小紙人兒閱讀 1,162評(píng)論 0 0

友情鏈接更多精彩內(nèi)容