2

私はゲーム エンジンを作ろうとしてきましたが、数学の基礎 (ベクトル、マトリックス、ポイント クラス) を作ることから始めました。静的ライブラリ ファイル (.lib) を作成したいと思います。ゲーム エンジンの残りの部分で必要に応じて使用します。

気になったのは以下。ライブラリ内のほとんどの関数は、できるだけ高速にする必要があるためです。たとえば、インライン化されている Vector クラスなどの関数を確認したいと思います。コンパイラはこれを自動的に行うことができますか? それとも何らかのヒントが必要ですか?

すべてのソースをヘッダー ファイルに入れることができることはわかっていますが、一部の関数は大きすぎてインライン化できない可能性があるため、これは実際には洗練されたソリューションではないと思います。(ヘッダーファイルは、それらを使用する人にとっては面倒ではありません。)

皆さんが私を助けてくれることを願っています。

キリスト教徒

4

2 に答える 2

1

関数のインライン化は、compileunit がソース コードを認識できる場合にのみ、現在のコンパイラ テクノロジで動作することが保証されています。コードをライブラリにコンパイルすると、関数が何を行うかに関係なく、関数はインライン化されません。

マシンコードへの道の一部にすぎない「オブジェクトファイル」を生成する「プログラム全体の最適化」スキーム(少なくともMSVCとGCC、おそらく他のコンパイラでも利用可能)がいくつかあります。ソースコードが望んでいたもの」は、最終的なコード生成/リンク段階でコードを移動したり、インライン化を実行したりするために利用できますが、これはコンパイル時にすべてのソースファイルが利用できる場合にのみ適用されます. 何かが最終的なオブジェクトコード (静的ライブラリ) になると、それは「インライン」部分にはなりません。

明らかに、クラスがある場合、それらはヘッダー ファイルにあるため、インライン化に適した関数をヘッダー ファイルに配置すると、コンパイラは正しいことを行います。

于 2013-05-05T13:30:18.293 に答える