2011-07-30 9 views
13

GCCがプロジェクトでCファイルを生成すると、ソースファイルに表示されるのと同じ順序でアセンブリ内に関数が出力されないことに注意してください。この並べ替えの目標は何ですか?また、GCCはヒューリスティックを使用して注文を決定しますか? (それは単にデータ構造を保持する関数のアーティファクトですか?)-fprofile-arcsを使用していないので、これは-freorder-functionsではありません。GCCはアセンブリ関数をどのように出力する順序を決めるのですか?

答えて

9

プロシージャ間最適化フェーズの後半部分では、コールグラフのボトムアップトラバーサルを使用します。それはあなたが見る順序です。 GCC hereのこの部分の元々のデザインについての論文があります(もう少し前から、このものはGCC 3.4で初めて登場しました)。

-fno-toplevel-reorder(またはGCCの最新バージョンでは-fno-unit-at-a-time)を使用して並べ替えを防止できますが、関連する最適化の一部が無効になります。

関連する問題