私のプロジェクトでは、いくつかのヘルパー関数を呼び出すタイトな内部ループがあります。私ImageCommon.hファイルにGCCの別ファイルからの関数のインライン化
BOOL isValidPoint(CGPoint point) __attribute__((always_inline));
、およびとして実装さ:最大のパフォーマンスを得るために、これらの単純な機能は次のように宣言されているImageCommon.mに
inline BOOL isValidPoint(CGPoint point);
。言い換えれば、私はいつもこれらの関数をインライン化したいと思っています。
ImageCommon.mの他の関数からisValidPoint
を呼び出すと、逆アセンブリ出力はisValidPoint
への関数呼び出しが消去されたことを確認します。しかし、私が別のソースファイルからこの関数を呼び出すと、関数呼び出しはそのまま残ります - インライン化されません。
1つのインプリメンテーションファイルで呼び出され、別のインプリメンテーションファイルで呼び出される関数をインライン化することはできますか?
私は広範なプロファイリングを行っています。これらの関数をインライン化することは絶対に価値があり、コンパイラはそれを単独では行いません。 – Bill
どのようにプロファイリングしましたか?プログラム全体の最適化を使用していますか?プロファイリングを使用してコンパイルし、プロファイルデータを使用して再コンパイルして、オプティマイザの動作を支援していますか? –