2012-05-04 7 views
0

私はオールインワンモジュールメソッドライブラリ関数のインラインが可能であることを確認する

A)いくつかのプロジェクト(あまりにもコンパイルされているソースとのメインアプリケーション用のライブラリ)を使用してVisual Studioソリューションを持っていると言うことができます、彼らは最終的なリンクに使用されるlibファイルが生成されます。

B)パフォーマンスを最大限に引き出すために最終リリースでインライン化する必要がある、プロジェクトやライブラリ全体で呼び出される小さな機能がたくさんあります。

C)しかし、開発プロセス中のコンパイル速度を最小限に抑えるために、インクルード依存関係や乱雑なヘッダーを最小限に抑えたい(メソッドボディがインライン展開を可能にするために本文内で定義したものと同様)。

私は、 "all-in-one.cpp"モジュールを含む特別な "最終リリース"プロジェクトを考えていました。これは#すべてのcppモジュールをソリューション内のすべてのライブラリから#includeするので、コンパイラはすべてのメソッド本体を参照し、必要なものをすべて最適化できます。

私は "Whole program optimization"が私にはこの仕事をしなければならないと思っていますが、1つのプロジェクトに対してのみです。

編集:g ++でlinuxでコンパイルすると、同様のオプションがありますか?

編集:使用しているすべてのモジュールを含む1つのcppを持つプロジェクトを作成しました。インラインで動作するcppで定義されたインラインを使用でき、私の場合はパフォーマンスが大幅に向上しました。

編集:いいえ、プログラム全体の最適化は、インライン関数の実装は、CPPで定義することができません(http://msdn.microsoft.com/en-us/library/78t98006%28v=vs.100%29.aspx)とYES、オールインワンのモジュール方式は、relaseのビルドのための唯一の合理的な方法のようです私は

ました

編集:コンパイル単位(100モジュール)に分割すると、コンパイルの速度に驚かされましたが、数分でコンパイルされますが、1つのcppとしてコンパイルすると数秒でコンパイルされます。

+0

コンパイラは、コードサイズを増やし、パフォーマンスに悪影響を及ぼすため、インライン展開はヒューリスティックを使用してインライン化されるかどうかを判断する必要があります。プログラム全体の最適化があなたの答えですが、あなたのコードをプロファイルしてパフォーマンスに影響を及ぼすものを特定してください。 –

+0

あなたが考えていることは、コンパイラによって自動的に行われます。この種のマイクロ最適化について考えるのをやめて、コンパイラはあなたよりずっと優れています。アルゴリズムの最適化について考えてみましょう。コンパイラはすぐにそれを賢明にすることはできません。 –

+0

コンパイラは、プロファイルガイド最適化を使用しない限り、インライン展開が必要なもの、つまりコードのどの部分が重要であるかという手掛かりはありません。 – kovarex

答えて

4

コードをプロファイリングしましたか?そうでなければ、これらの変更に迷ってはいけません。

また、プログラム全体の最適化は、1つのプロジェクトだけでなく、ソリューション全体で機能します。それはリンクでもそう言います。コンパイラにコードの最適化を任せ、理解しやすいコードできれいで組織化された構造を心配してください。

+0

私はこれまでコードをプロファイルしていませんでしたが、私は後でそれを確実に行うつもりです。私は、プロジェクトのいくつかの部分が非常に速くなければならず、いくつかの関数をインライン化しなければならないことを知っています。ヘッダーに関数を保持する必要がないことを知っていれば、後でそれをリファクタリングする必要があります。 – kovarex

+0

@Marwinあなたは最初にプロファイルする必要があります。ボトルネックが機能を呼び出すことはほとんどありません。 –

+0

あなたが言いたいことは、真実ではないことがわかりました。 http:// msdn。microsoft.com/en-us/library/78t98006%28v=vs.100%29.aspx – kovarex

関連する問題