1. 輸入:前者是二進制可執行程序,后者是高級語言源程序
2. 優化對象:前者主要是直線型代碼區域比如蹤跡或超塊(熱點路徑代碼),超塊類似后者中的擴展塊;后者是控制流圖,即所有代碼塊,不限于熱點路徑代碼。超塊構造類似后者中的基本塊放置和過程放置
3. 優化方法:前者要運行時采集剖析數據比如結點剖析和邊剖析,再基于剖析數據形成有利于指令cache局部性的超塊,然后在超塊上作常量傳播、常量折疊、強度削弱、復寫傳播、死代碼消除、公共表達式消除等基本優化,也會作指令重排,但考慮到陷阱處理要恢復精確的客戶進程狀態,因此比較受限,沒有后者中的指令重排自由。后者如果基于剖析作優化,那么效果和前者差不多
4. 寄存器分配:都是基于活躍范圍的沖突圖著色算法,但前者考慮到陷阱處理會延長相關寄存器的活躍范圍,而后者不用
————————————————————————
總結:二進制優化所用的技術和編譯優化其實相同,不同的是為陷阱處理所作的改變調整,以及運用在熱點代碼塊而非所有塊
posted on 2023-09-06 23:44
春秋十二月 閱讀(71)
評論(0) 編輯 收藏 引用 所屬分類:
Compiler