13
閱讀GCC爲我的項目中的C文件生成的程序集,我注意到函數在彙編時不會按照它們在源文件中出現的順序輸出。這次重新排序的目標是什麼?GCC使用何種啓發式來決定訂單? (它只是數據結構保存函數的人工產物?)這不是-freorder-functions
,因爲我沒有使用-fprofile-arcs
。GCC如何決定輸出組裝函數的順序?
閱讀GCC爲我的項目中的C文件生成的程序集,我注意到函數在彙編時不會按照它們在源文件中出現的順序輸出。這次重新排序的目標是什麼?GCC使用何種啓發式來決定訂單? (它只是數據結構保存函數的人工產物?)這不是-freorder-functions
,因爲我沒有使用-fprofile-arcs
。GCC如何決定輸出組裝函數的順序?
程序間優化階段的後期部分使用調用圖的自底向上遍歷;這是你看到的順序。有一篇關於GCC here這個部分的原始設計的文章(不久前;這個東西最初出現在GCC 3.4中)。
您可以使用-fno-toplevel-reorder
(或-fno-unit-at-a-time
針對較新版本的GCC)阻止重新排序,但會禁用某些相關優化。