volatile的用法和實際應用場景

2021-09-27 07:14:21 字數 567 閱讀 5912

1、volatile提醒編譯器它後面所定義的變數隨時有可能改變,因此編譯後的程式每次需要儲存或讀取這個變數的時候,都要小心地。從該變數的位址中讀取。如果沒有volatile關鍵字,則編譯器就可能優化讀取和儲存,可能暫時使用暫存器中的值。

當要求使用volatile宣告變數的時候,系統總是重新從它所在的記憶體讀取資料,即使前面的指令剛剛從該處讀取過資料。精確地說就是,遇到這個關鍵字宣告的變數,編譯器對訪問該變數的**就不再優化,從而可以提供對特殊位址的穩定訪問;如果不使用volatile,則編譯器對所宣告的語句進行優化。
(簡潔地說就是,volatile關鍵字影響編譯器編譯的結果,用volatile宣告的變數表示該變數隨時可能發生變化,與該變數有關的運算,不要進行編譯優化,以免出錯。)

2、使用volatile的幾種情形

<1>中斷服務程式中修改的供其他程式檢測的變數需要加volatile;

<2>多工環境下各任務間共享的標誌應該加volatile;

<3>多儲存器對映的硬體暫存器通常也要加volatile,因為每次對它的讀寫都可能有不同意義。

volatile的用法和作用

首先volatile修飾的變數,作用在編譯階段,影響編譯出的結果,其修飾的變數是隨時可能被修改的,volatile告訴編譯器,這個變數是重要人物,不要偷懶的去走捷徑,每次認認真真的去從記憶體拿值。舉個簡單的例子 求平方 int square volatile int ptr 假如在你做運算的時候,外...

MySQL SHOW INDEX語法的實際應用

mysql show index語法的實際應用 以下的文章主要描述的是 mysql show index語法的實際操作用法以及其實際檢視索引狀態 語法 的具體內容的描述,如果你對這一技術,心存好奇的話,以下的文章將會揭開它的神秘面紗。sql view plain copy show index fr...

sklearn中的pipeline實際應用

前面提到,應用sklearn中的pipeline機制的高效性 本文重點討論pipeline與網格搜尋在機器學習實踐中的結合運用 一般地,sklearn中經常用到網格搜尋尋找應用模型的超引數 實際上,在訓練資料被送入模型之前,對資料的預處理中也會有超引數的介入,比如給資料集新增多項式特徵時所指定的指數...