私はmalloc
/free
への反復呼び出しが高価である可能性があり、この理由から、C++標準ライブラリコンテナはデストラクタでfree
を呼び出すのではなく、メモリプールを使用することを読んでいます。また、これは、C++標準ライブラリコンテナのパフォーマンスが、必要なCスタイルの配列を手動で割り当てたり割り当てを解除したりするよりも高くなる可能性があることを意味しています。malloc/freeペアが同じジョブを実行しているとしたら、C++標準ライブラリコンテナがメモリプールを使用するのはなぜですか?
しかし、私は今、私はCのFAQに読んでいることから、このことについて困惑している:のmalloc /無料の(http://c-faq.com/malloc/freetoOS.html)
ほとんどの実装では、オペレーティング・システムに解放されたメモリを返しませんが、同じプログラム内で将来のmalloc呼び出しに利用できるようにするだけです。
これは、本質的にmalloc
/free
関数はC++標準ライブラリのコンテナとして非常に同じ仕事をしようということを意味します。彼らは、プール内のメモリを維持し、プログラム片を与えることによって、繰り返し主張/再利用のメモリを最適化しようこのプールのリクエストに応じて。一度実行すればそのような最適化の利点を見ることができますが、わたしの直感は、これをいくつかの異なる抽象レイヤーで同時に開始すると、パフォーマンスが実際に低下する可能性があることを示しています。
ここで私は何を誤解していますか?
あなたがここで誤解していることは、あなたの仕事がC++ライブラリ自体を書くことを必要としない限り、これは誰にとっても問題ではないはずです。私は20年以上のハッキングC++でこれが本当に気にしていたことを思い出すことはできませんでした。 –
@SamVarshavchikこれは、私が「なぜこのように構成されているのか、そうではないのか」についての質問を、単純な好奇心から、あるいは学ぶのを妨げるものではありません。 – gaazkam