在英特爾(R) 奔騰(R) M 處理器上,寫入 16 或 8 位暫存器(例如 al、ah、ax)之後立即讀取 32 位暫存器(例如 eax)時,讀取會一直暫停到寫入失效(至少七個週期)。
在以下情況中,此細節具有實質性意義:
計數器的商(部分暫停週期/時鐘訊號)不佳。值 0.00 應視為良好,值 0.01 應視為不佳。
在預設的優化級別(開關 -O2)使用英特爾(R) C++ 編譯器,這將確保在產生的程式碼中不發生部分暫停。
使用 -G6 或 -G7 編譯器選項時,產生的部分暫停比使用 -G5 選項時的少。這適用於英特爾 C++ 編譯器。
只要不嚴重影響數據區域性,請考慮將 16 位與 8 位數據型別(如 short 與 byte)替換成更大的數據型別(如 int)。
在彙編程式碼中,避免部分暫停:不要在寫入暫存器的關聯子暫存器之一后,立即讀取它。例如,不要在寫入同 32 位暫存器關聯的 16 位或 8 位子暫存器之一后,立即讀取它。