內聯彙編

內聯彙編是在 C 原始碼中新增彙編指令的做法。沒有 ISO C 標準要求支援內聯彙編。由於它不是必需的,因此內聯彙編的語法因編譯器而異。儘管通常支援它,但使用內聯彙編的原因很少,而且很多理由都沒有。

優點

  1. 效能通過編寫操作的特定彙編指令,你可以獲得比編譯器生成的彙編程式碼更好的效能。請注意,這些效能提升很少見。在大多數情況下,只需重新安排 C 程式碼就可以獲得更好的效能提升,這樣優化器就可以完成它的工作。
  2. 硬體介面裝置驅動程式或處理器啟動程式碼可能需要一些彙編程式碼才能訪問正確的暫存器,並保證某些操作按特定順序發生,並且操作之間有特定的延遲。

缺點

  1. 編譯器可移植性從一個編譯器到另一個編譯器,內聯彙編的語法不保證是相同的。如果你正在編寫應該由不同編譯器支援的內聯彙編程式碼,請使用前處理器巨集(#ifdef)來檢查正在使用的編譯器。然後,為每個受支援的編譯器編寫單獨的內聯彙編部分。
  2. 處理器可移植性你無法為 x86 處理器編寫內聯彙編,並期望它可以在 ARM 處理器上執行。內聯彙編旨在為特定處理器或處理器系列編寫。如果你希望在不同的處理器上支援內聯彙編,請使用前處理器巨集來檢查編譯程式碼的處理器,並選擇相應的彙編程式碼部分。
  3. 未來的效能變化可以根據某個處理器時鐘速度編寫預期延遲的內聯彙編。如果為具有更快時鐘的處理器編譯程式,則彙編程式碼可能無法按預期執行。