http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html"home-brew" STLのパフォーマンス?
この記事によれば、STLはゲーム開発には適していません。 これについてあなたの考えは何ですか?
現時点でのアプローチは です。パフォーマンス問題の原因が自家製のコンテナ(またはアロケータ)と交換されている場合は、STLを使用してください(まだ来ていませんが、ハイエンドの3Dゲームは行っていません)。 )
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html"home-brew" STLのパフォーマンス?
この記事によれば、STLはゲーム開発には適していません。 これについてあなたの考えは何ですか?
現時点でのアプローチは です。パフォーマンス問題の原因が自家製のコンテナ(またはアロケータ)と交換されている場合は、STLを使用してください(まだ来ていませんが、ハイエンドの3Dゲームは行っていません)。 )
あなたのアプローチは、この場合、唯一の標準です。最適化のルール#1は、「ボトルネックがどこにあるかを正確に把握していない限り、最適化しないでください。
STLコンテナを直接使用するのではなく、typedefで定義された型を使用する場合は、後で比較的簡単にコンテナを交換することができます。つまり、次のような意味です:
#include <vector>
typedef std::vector<int> MyIntVectorType;
int main()
{
MyIntVectorType theVector;
}
STLを使用し、許容範囲内で動作する場合はそのまま使用してください。そうでない場合は、別のものを試してください。既存の実装を試す前に、すでに存在するものを書き直したくないのです。
あなたは、STLがカバーの下で何をしているのか知っておく必要があります。たとえば、ベクトルを使用する場合は、ベクトルを任意に拡大させるだけでなく、vector :: resize()を使用して割り当てを行い、一度しか割り当てないようにします。そのようなもの。あなたのアプローチは悪くない - ちょうどあなたの宿題をする。
ベクトル:: reserve() – kizzx2
参照する必要がありますか?あなたが何をしているのか分からないときに、どのように危険なSTLができるかを見てください。 :) –
C++で実行された問題の多くは、C++0xに修正されています。
置き換えが必要なコンテナではない場合がありますが、それは含まれているオブジェクトです。私はかつてキー用の文字列を持った大きなstd :: mapを持っていましたが、それは遅すぎました。私はすべてのキーが同じサイズであることに気がついたので、文字列クラスを固定サイズのcharバッファーのラッパーとして書かれた特殊なバージョンに置き換え、パフォーマンスはもはや問題ではありませんでした。
あなたのボトルネックがどこにあるのかを知っていて、簡単な仮定を単純化しない限り、より高速なバージョンを書くことはできません。
アロケータをSTLコンテナでスワップして、カスタムアロケータを取得することもできます。
ゲームプログラミングを始めたばかりの方であれば、STLを使い、安定しています。あなたは、動作するものと安定しているもので、1フレームまたは2フレームの間に引っかき傷をつけるよりも良いです。しかし、多くのメジャースタジオがそれを使用しない理由は2つあります。
カスタムバージョンのコンテナを持つことは簡単な仕事ではありませんが、それが価値がある場合にのみ実行してください。
ゲーム開発者にルール#1を採用させることを幸運にします。 :) – chaos
私はゲーム開発者です! :-) –
そして、他の人にルール#1を採用された経験はどうでしたか? :) – chaos