violate 修飾的用法

2021-06-12 08:12:23 字數 823 閱讀 3544

乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值(from memory),而不是使用儲存在暫存器裡的備份。

下面是volatile變數的幾個例子:

1) 並行裝置的硬體暫存器(如:狀態暫存器)

2) 乙個中斷服務子程式中會訪問到的非自動變數(non-automatic variables)

3) 多執行緒應用中被幾個任務共享的變數

這個多用在嵌入式開發中,一般場合不需要使用。

先看看下面的例子:

int i=10;

int j = i;//(1)語句

int k = i;//(2)語句

這時候編譯器對**進行優化,因為在(1)、(2)兩條語句中,i 沒有被用作左值。這時候編譯器認為i 的值沒有發生改變,所以在(1)語句時從記憶體中取出i 的值賦給j 之後,這個值並沒有被丟掉,而是在(2)語句時繼續用這個值給k 賦值。編譯器不會生成出彙編**重新從記憶體裡取i 的值,這樣提高了效率。但要注意:(1)、(2)語句之間i 沒有被用作左值才行。

再看另乙個例子:

volatile int i=10;

int j = i;//(3)語句

int k = i;//(4)語句

volatile 關鍵字告訴編譯器i 是隨時可能發生變化的,每次使用它的時候必須從記憶體中取出i的值,因而編譯器生成的彙編**會重新從i 的位址處讀取資料放在k 中。這樣看來,如果i 是乙個暫存器變數或者表示乙個埠資料或者是多個執行緒的共享資料,就容易出錯,所以說volatile 可以保證對特殊位址的穩定訪問。

C語言修飾詞之violate

乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值 from memory 而不是使用儲存在暫存器裡的備份。下面是volatile變數的幾個例子 1 並行裝置的硬體暫存器 ...

C語言修飾詞之violate

乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值 from memory 而不是使用儲存在暫存器裡的備份。下面是volatile變數的幾個例子 1 並行裝置的硬體暫存器 ...

python 詳解 修飾器的用法

python中 的用法 是乙個裝飾器,針對函式,起呼叫傳參的作用。有修飾和被修飾的區別,function 作為乙個裝飾器,用來修飾緊跟著的函式 可以是另乙個裝飾器,也可以是函式定義 1def funa desa print it s funa def funb desb print it s fun...