1

速度の最適化が重要なプログラムを書いています。速度が 1% 向上するごとに適切です。

頻繁に呼び出される関数では、(小さい) クラス MyClass の固定サイズの配列が必要です。最初は、std::vector を使用しました。全体が小さい (通常は 256 アイテム、クラス サイズは 12 バイト、配列が 16 バイトでアラインされている場合は 3072 バイト)

今、それが起こります:

  • スタックに割り当てられた C スタイルの配列 MyClass[256] を使用すると、パフォーマンスが向上します。私の理解では、これはメモリの割り当て/削除が行われず、スタックの割り当てが無料であるためです。
  • ::operator new を使用してメモリ割り当てを使用すると、パフォーマンスも向上します。必要のないクラスの初期化をスキップするためです。これに加えて、可能な限り生のメモリの初期化を避けることを好みます。

したがって、スタックへの割り当てと初期化のスキップの両方がさらに高速になるはずです。必要に応じてクラス コンストラクターを書き直すことができますが、その方法がわかりません。

ありがとう、

エティエンヌ

4

1 に答える 1

3

初期化はいらない?したがって、おそらく MyClass にはコンストラクターがなく、構築が必要なデータメンバーもありませんか? その場合、コンパイラはとにかく初期化を行いません。したがって、新しいものを使用してください。

MyClass にコンストラクターがある場合は、あなたが言うように、初期化が必要ないときにコンストラクターがある理由を検討する必要があります。

MyClass に構築が必要なデータ メンバーがある場合 (std::stringたとえば)、初期化は必要ないという主張を照会します。

ベクトルから配列に切り替えると、時間を節約できます。

于 2013-09-24T09:57:26.707 に答える