質問: 割り当て解除が遅いのはなぜですか? 私はネット上で答えが見つからない質問があります... 私はこのように宣言されたセットを持っています: ``` set MySet ``` 私はメルセン・トゥイスターで生成された100万の乱数を挿入しています。ランダム生成と挿入は本当に速く(百万回の数値では約1秒)、割り当て解除は非常に遅い(1分30秒)。 割り当て解除が遅いのはなぜですか?私はセットのためのカスタムデストラクタを使用していません。
回答: 多くのアプリケーションが割り当てを解除することなく割り当てを行うため、割り振りを犠牲にして割り当てを最適化する方が理にかなっていると思われますが、その逆もありません。私は `malloc` と `free` (一度にすべての割り当てと割り当てを解除するのではなく)を混在させたアプリケーションで、同様のパターンを自分自身で見ました。 私はヒープアロケータを書いたことがないので、それよりも深い技術的な理由があるかどうかはわかりません。割り振りを解除するときは、隣接する空きブロックを見つけて合体させる必要があります。だから仕事は根本的に違います。 100万の小さな `free()`の音はかなり遅く90秒です。私は本当にWindowsをプログラムしたことがないので、それが異常かどうかは言えませんが、システムはもっとうまくやれるはずです。 The solution to your problem may be simply to skip freeing the objects before the program exits. You might try deriving a custom allocator from `std::allocator< unsigned int >` which makes `deallocate` a no-op.