簡體   English   中英

你可以在你的c源代碼中手動執行所有gcc優化(-O2,-O3)嗎?

[英]Can you do all gcc optimizations (-O2, -O3) manually in your c source code?

在我的類項目中,我的項目設置為使用gcc的優化級別-O0(無優化),我們不允許在最終提交時更改它。

我使用-O2測試了我的代碼,並獲得了整個程序的2倍加速。 所以我想知道,是否有可能完成-O2所做的每個優化,並在我的代碼中手動執行這些優化? 或者是堆棧,框架,機器/程序集等內部的一些-O2優化,因此不允許程序員在我的源代碼中手動進行那些優化(如果這樣做有意義的話)

是否可以通過-O2執行的每個優化,並在我的代碼中手動執行這些優化?

否。編譯器執行的許多優化都不能用C表示。其中一些包括:

  • 禁用幀指針
  • 在函數的開頭和結尾刪除不必要的寄存器保存/恢復
  • 裝配上的“窺視孔”優化,例如移除冗余移動,裝載或存儲
  • 插入no-ops以將循環對齊到特定的地址邊界(通常為16個字節)

這並不是說編譯器執行的所有優化都是不可翻譯的 - 當然 - 僅僅是其中一些優化。

是的,但這與在Minecraft中構建自己的8086級微處理器相同 - 不值得花時間和精力。 是的,這些優化中的許多涉及低於抽象語言級別的東西。 你的教授可能不知道你想要一個未經優化的可執行文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM