常に再利用している STL コンテナー (std::list) があります。これによって私は私を意味します
- 多数の要素をコンテナにプッシュする
- 処理中に要素を削除します
- コンテナをクリアする
- すすぎ、何度も繰り返す
callgrind を使用してプロファイルを作成すると、new
( malloc
) およびdelete
( free
) への呼び出しが大量に発生し、非常にコストがかかる可能性があります。したがって、合理的に多数の要素を事前に割り当てる方法を探しています。また、割り当てプールが最高水準点に達するまで増加し続け、割り当てプールがコンテナー自体が削除されるまでメモリにハングアップし続けることも望んでいます。
残念ながら、標準のアロケータはメモリ プールのサイズを継続的に変更するため、独自に記述しなくても上記を実行できるアロケータを探しています。
そのようなアロケーターは存在しますか? また、そのようなアロケーターはどこにありますか?
GCC を使用する Linux と STLPort を使用する Android の両方で作業しています。
編集: 配置new
は問題ありません。最小化したいのは、コストのかかるヒープ ウォーキングです。また、キャッシュ ミスを最小限に抑えるために、すべてのオブジェクトをできるだけ近づけたいと考えています。