一段代碼想要最終被計算機執行,首先需要被翻譯成機器可識別和執行的指令,代碼編譯的程序往往包含幾個步驟:
代碼 -> 詞法語法分析 -> 語意分析 -> 中間代碼生成 -> 目標代碼生成
在中間代碼生成這個階段,編譯器會嘗試對中間代碼進行優化,通過減少無效或冗余的代碼、計算強度優化等手段,以助于減少最終生成的指令數,或使用更高效的指令,也可認為由于記憶體訪問速度遠不及CPU處理速度,為提高機器整體性能,
(1)在硬體上: 引入硬體高速快取Cache,加速對記憶體的訪問,另外在現代CPU中指令的執行并不一定嚴格按照順序執行,沒有相關性的指令可以亂序執行,以充分利用CPU的指令流水線,提高執行速度,
(2)軟體一級的優化:一種是在撰寫代碼時由程式員優化,另一種是由編譯器進行優化,
二、volitile的作用
用來修飾定義變數的,告訴編譯器不要對定義的變數進行編譯優化,如果你的程式開啟了編譯優化后運行不正常了,那首先就要排查下,是否正確的使用了這個關鍵字,
三、編譯器優化加不加volitile的區別
(1) 設定編譯器優化 匯編執行時,不會從記憶體中讀取變數的最新值,只會一直使用第一次讀取到的值,
(2) 不設定編譯器優化 匯編執行時,每次都會實時的從記憶體中讀取變數的最新值,保證變數的值是最新的,
四、volatile的使用場景
1、中斷服務函式中修改的供其它程式檢測的變數需要加volatile;
2、多任務環境下各任務間共享的標志應該加volatile;
3、存盤器映射的硬體暫存器通常也要加volatile說明,因為每次對它的讀寫都可能有不同意義;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/538359.html
標籤:其他
上一篇:Java學習六
下一篇:Java基本資料型別
