2011-07-30 19 views
13

閱讀GCC爲我的項目中的C文件生成的程序集,我注意到函數在彙編時不會按照它們在源文件中出現的順序輸出。這次重新排序的目標是什麼?GCC使用何種啓發式來決定訂單? (它只是數據結構保存函數的人工產物?)這不是-freorder-functions,因爲我沒有使用-fprofile-arcsGCC如何決定輸出組裝函數的順序?

回答

9

程序間優化階段的後期部分使用調用圖的自底向上遍歷;這是你看到的順序。有一篇關於GCC here這個部分的原始設計的文章(不久前;這個東西最初出現在GCC 3.4中)。

您可以使用-fno-toplevel-reorder(或-fno-unit-at-a-time針對較新版本的GCC)阻止重新排序,但會禁用某些相關優化。