私は非常に高性能なC++ライブラリを持っています。new
グローバルとを使用する必要がないように、メモリプールを作成することを考えていますdelete
。私はいくつかの読書をしました。しかし、これがパフォーマンスとメモリリークの削減に役立つかどうかを知りたいと思いました。
3 に答える
あなたのライブラリがカスタム アロケータの恩恵を受けると信じるに足る明確な理由がない限り、仮にあったとしてもあまり役に立たない可能性があります。
無向最適化を実行しようとしているようです。しないでください。最初にプロファイリングを使用してパフォーマンス データを収集してから、必要に応じて最適化を検討してください。
アプリケーションの正確なメモリ割り当てパターンに微調整されたメモリアロケータは、割り当てパターンが「汎用」とは異なり、予測可能であることを考えると、一般的なアロケータよりも優れている必要があります。ただし、メモリリークの削減または検出はまったく別の問題であり、パフォーマンスが懸念される前に解決する必要があります。
私の経験によると、独自のメモリ プールを実装してもパフォーマンスは向上しません。マルチスレッド環境では、ミューテックスを使用してプールでメモリの割り当てと解放を保護する必要がありますが、ミューテックスはシステムの新規作成/削除と比較して非常に重いためです。
また、メモリリークを減らすのにも役立ちません。メモリ リークを減らすには、割り当てたメモリをすべて解放する必要があります。プールではなく、プログラムで実際に解決する必要があります。
唯一の利点は、サードパーティのツールに依存せずにメモリ使用量を追跡できることです。