1樓:百物電腦配件店
volatile是個多執行緒變數,就是可能在很多函式中會修改他。特別是中斷函式中一定要用他。volatile的意思就是「不穩定的」可能突發地改變它,微控制器每次呼叫他的話,都要從他的地址取數。
預防微控制器不知道普通的變數改變了,還是用上一次的資料。
定義方法是 :
volatile char i; //定義一個字元型的多執行緒變數"i"
volatile int j; //定義一個整型的多執行緒變數"j"
記得給我打個辛苦分!哈哈
2樓:魔群領袖
我就用上面的例子吧
volatile int i = 10;
int k = i;
這段**如果沒有加上volatile,它的執行過程是 i = 10, 10 ->reg暫存器,k = reg值,就是說,k=i實際上是從暫存器裡讀出來的。這樣快捷高效,當然並不是每次都這樣,因為暫存器有限。如果在10->reg暫存器的時候,i儲存的記憶體變化了,也就是別的執行緒修改了i的值,k=i仍然會按照i=10來執行
加上volatile後,執行過程是 i = 10, k = *(int *)(&i); 它會從i的記憶體地址上去讀,當然值會非常準確,但是效率會比從暫存器中讀要慢很多。
3樓:土豆遇見熊
volatile int i = 10;
int k = i;
這段**如果沒有加上volatile,它的執行過程是 i = 10, 10 ->reg暫存器,k = reg值,就是說,k=i實際上是從暫存器裡讀出來的。這樣快捷高效,當然並不是每次都這樣,因為暫存器有限。如果在10->reg暫存器的時候,i儲存的記憶體變化了,也就是別的執行緒修改了i的值,k=i仍然會按照i=10來執行
加上volatile後,執行過程是 i = 10, k = *(int *)(&i); 它會從i的記憶體地址上去讀,當然值會非常準確,但是效率會比從暫存器中讀要慢很多。
c語言中volatile關鍵字是什麼含義
4樓:匿名使用者
說明這個變數不允許編譯器進行自作聰明的優化。
5樓:匿名使用者
用volatile關鍵字定義變數,相當於告訴編譯器,這個變數的值會隨時發生變化,每次使用時都需要去記憶體裡重新讀取它的值,並不要隨意針對它作優化。
不使用volatile定義的變數,可能因為編譯器優化而出現一些問題,具體可以看給出的參考資料,裡面有一個例子。
建議使用volatile變數的場所:
(1) 並行裝置的硬體暫存器
(2) 一箇中斷服務子程式中會訪問到的非自動變數(全域性變數)(3) 多執行緒應用中被幾個任務共享的變數
6樓:
volatile 影響編譯器編譯的結果,指出,volatile 變數是隨時可能發生變化的,與volatile變數有關的運算,不要進行編譯優化,以免出錯,(vc++ 在產生release版可執行碼時會進行編譯優化,加volatile關鍵字的變數有關的運算,將不進行編譯優化。)。
例如:volatile int i=10;
int j = i;
...int k = i;
volatile 告訴編譯器i是隨時可能發生變化的,每次使用它的時候必須從i的地址中讀取,因而編譯器生成的可執行碼會重新從i的地址讀取資料放在k中。
而優化做法是,由於編譯器發現兩次從i讀資料的**之間的**沒有對i進行過操作,它會自動把上次讀的資料放在k中。而不是重新從i裡面讀。這樣以來,如果i是一個暫存器變數或者表示一個埠資料就容易出錯,所以說volatile可以保證對特殊地址的穩定訪問,不會出錯。
c中關鍵字volatile的意思,主要作用是什麼?(通俗易懂的),謝謝。
7樓:匿名使用者
舉例說明:
volatile int i=10;
int j = i;
...int k = i;
volatile 告訴編譯器i是隨時可能發生變化的,每次使用它的時候必須從i的地址中讀取,因而編譯器生成的可執行碼會重新從i的地址讀取資料放在k中。
volatile 影響編譯器編譯的結果,指出,volatile 變數是隨時可能發生變化的,與volatile變數有關的運算,不要進行編譯優化,以免出錯,(vc++ 在產生release版可執行碼時會進行編譯優化,加volatile關鍵字的變數有關的運算,將不進行編譯優化。)。
其中編譯器編譯優化是:
由於編譯器發現兩次從i讀資料的**之間的**沒有對i進行過操作,它會自動把上次讀的資料放在k中。而不是重新從i裡面讀。這樣以來,如果i是一個暫存器變數或者表示一個埠資料就容易出錯,所以說volatile可以保證對特殊地址的穩定訪問,不會出錯。
c語言中volatile關鍵字是什麼含義怎麼辦呢
c c 中的 volatile 關鍵字和 const 對應,用來修飾變數,通常用於建立語言級別的 memory barrier。volatile 關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如 作業系統 硬體或者其它執行緒等。遇到這個關鍵字宣告的變數,編譯器對訪問...
c語言中的關鍵字分別是什麼意思,C語言中的32個關鍵字分別是什麼意思?
c語言32個關鍵字 code auto 宣告自動變數 一般不使用double 宣告雙精度變數或函式 int 宣告整型變數或函式 struct 宣告結構體變數或函式 break 跳出當前迴圈 else 條件語句否定分支 與 if 連用 long 宣告長整型變數或函式 switch 用於開關語句 cas...
C語言中for迴圈語句,c語言中for語句是怎麼用的
for 語句包括三個表示式,第一個和第三個可以省略,省略第一個的意思是在for之前已經對變數初始化,例如i 0 for i 5 i 和for i 0 i 5 i 意思相同 第三個省略的意思也很明顯,原來的i 可以在for迴圈語句中實現,例如 for i 0 i 5 i 和for i 0 i 5 i ...