0

私はいくつかのパフォーマンス調整作業を行っています。基本的に、コードベースに潜在的なボトルネックが見つかり、それに対する最善の解決策を考えています。私はこの質問をできるだけ簡単にしようとします。基本的に、一連の double 値 (std::set) で機能するメソッドがあります。したがって、メソッドのシグネチャは次のようになります。

void MyClass::CalculateStuff(const std::set<double> & mySet);

このメソッドを呼び出すコード内のいくつかの場所があります。これらの場所のうち、このセットを扱う必要がある場所はごくわずかですが、他の場所はセットを気にしません。このセットを含むこのメソッドの別のバージョンを作成し、空のセットを使用するように既存のメソッドを変更できると思います。ただし、これにより、セットを気にしない場所にいくらかのオーバーヘッドが発生します (追加のメソッド呼び出しを行う必要があるため)。したがって、私が考えた他のオプションは、次のように、代わりにセット引数へのポインターを使用することでした。

void MyClass::CalculateStuff(const std::set<double> * pMySet);

ポインターの有効性によって、セットを使用するかどうかが決まります (つまり、セット引数に NULL ポインターを渡すことは、セットに関連する作業を行わないことを意味します)。これは高速ですが、インターフェイスの観点からは明らかにクリーンではありません。コードにかなりコメントを付けることができたと思います。

何をすべきだと思いますか?これはおそらく大したことではありませんが、コードを高速化するには (アプリケーションでパフォーマンスが非常に重要な場合)、コードがクリーンで管理しやすいようにするにはどうすればよいかを考えるようになりました。この場合、どこに線を引けばよいでしょうか。

4

1 に答える 1

0

私はゲームのプログラミングをしています。そして私のために。ゲームが遅れ始めてからプロファイリングするときなどの潜在的なボトルネックについてのみ心配しています。

オブジェクトへのポインターはわずか 4 バイトであるため、ポインターで渡す方がメモリ効率が高くなります。しかし、nullを渡すことをお勧めします。ornullptrではなく null ポインターを定義するための現在の標準として使用します。NULL0

クラスのセットで何かを計算するためにセットを渡していると思います。その場合、演算子のオーバーロードが最適なオプションになるでしょうか?

于 2013-04-14T03:49:54.593 に答える