背景:
一直會有意無意的看到有這個volatile,但是做為乙個在linux應用層寫了幾年**的程式設計師,還真的沒有搞懂什麼時候需要這樣用?
查了一圈,網上都是各種告訴編譯器不要把該變數放到暫存器,放到暫存器,如果其它地方改了拿不到最新的值,不要優化等等
首先說下,組合語言真的屬於基本不會那種。
多執行緒把乙個變數在其它地方改了?那麼這個變數應該是乙個全域性變數或者類似全域性變數的吧?編譯器不會傻到這種程度吧?
再從另外乙個角度想,多執行緒寫的比較多吧,很多人都沒有用過這個volatile,沒有出過問題啊,所以我覺得搜出來的說法應該不靠譜。
唯獨有一點,我覺得說的過去,在讀取io裝置的對映記憶體位址值時,要使用volatile,那個東西是個變化的,不過這個應該也是驅動裡面做的事情吧?跟應用層還是沒有關係。
更新:volatile 是用來告訴編譯器,可能在編譯器能管理範圍之外,有意想不到的方法或者辦法會修改該變數,不要做暫存器等的優化,每次使用都從記憶體裡面再次獲取。
謝謝。
Dom Node型別型別
node.element node 1 元素節點 node.attribute node 2 屬性節點 node.text node 3 文字節點 node.cdata section node 4 node.entity reference node 5 實體引用節點 node.entity no...
強型別,弱型別,靜態型別,動態型別的區別
型別系統的一些概念,眾說紛紜,使用上也比較亂。有些東西,甚至不好嚴格定義。以下算學術界的一種相對 嚴格 的說法。首先了解一下基本概念 有了上面的概念,再討論強 弱型別,靜態 動態型別 偏向於不容忍隱式型別轉換,弱型別相對于強型別來說型別檢查更不嚴格,比如說允許變數型別的隱式轉換,允許強制型別轉換等等...
強型別與弱型別,靜態型別和動態型別
首先強弱是相對的。強型別 每個變數和物件都必須宣告型別,在編譯時確定好型別了,執行時不能更改。偏向於不容忍隱式型別轉換。譬如說haskell的int就不能變成double。弱型別 編譯時不確定型別,執行時根據語義確定是哪種型別。通俗地說,弱型別偏向於容忍隱式轉換,把不同型別的變數放在一起運算。靜態型...