1

このreddit スレッドは、カスタム メモリ アロケータに注目しました。たとえば、ユーザー Rohmboid は次のように述べています。

明確な利点がなければ、人々は独自のプール アロケータを作成しないでしょう。

あることをどうやって知るのでしょうか。

プログラムの実行時間の 1% 未満しかメモリ管理に費やされない場合、カスタム アロケータの作成に時間/お金/エネルギーを浪費したくありません。また、カスタム アロケーターに切り替えて、スピードアップを判断できなくなりたくもありません。だから私は疑問に思っています:メモリの割り当て/解放/フェッチに費やされた時間をどのように測定(または少なくとも推定)できますか?

4

1 に答える 1

4

あることをどうやって知ることができますか?

コードをプロファイリングします。

コード内のホット パスでないものを最適化しても意味がありません。

アロケーター (A) が CPU 時間の 5% を使用し、アプリが残りの 95% を使用している場合、アロケーターを 2 倍高速化すると(5/2)/100 = 2.5%ブーストが得られます。ここで、B を少しでも高速化してみてください。

どのように?

最も簡単な方法は、IDE 組み込みのプロファイラーを使用することです。私は Intel VTune を使用していますが、MSVS はかなりまともです。その使いやすさは本当に素晴らしいです

プロファイリング プログラムを使用すると、追加の利点があります。コードを変更する必要はまったくありません。プロファイリング オプションを変更して再度実行する場合も、再コンパイルする必要はありません。そうは言っても、アロケーター内に直接配置する必要はほとんどありませんが、アプリケーションのタイマーも良い結果をもたらす可能性があります。プログラムに最も時間がかかる可能性のある場所を継続的に絞り込むことをお勧めします。

于 2013-02-24T10:00:50.827 に答える