重排序是什么?重新排序?不可以這么單一的理解。
重排序通常是編譯器或運行時環境為了優化程序性能而采取的對指令進行重新排序執行的一種手段。重排序分為兩類:編譯器重排序和運行期重排序,分別對應編譯時和運行時環境。
不要假設指令執行的順序,因為根本無法預知不同線程之間的指令會以何種順序執行。
一、編譯器重排序
編譯器重排序的典型就是通過調整指令順序,在不改變程序語義的前提下,盡可能的減少寄存器的讀取、存儲次數,充分復用寄存器的存儲值。
int a = 5;① int b = 10;② int c = a + 1;③ 假設用的同一個寄存器
這三條語句,如果按照順序一致性,執行順序為①②③寄存器要被讀寫三次;但為了降低重復讀寫的開銷,編譯器會交換第二和第三的位置,即執行順序為①③②
二、重排序的意義
重排序有利於充分使用流水線,進而達到超標量的效果。
