アプリケーションに適したメモリ アロケータを特定する唯一の方法は、いくつか試してみることです。言及されたすべてのアロケーターは賢い人々によって書かれたものであり、特定のマイクロベンチマークで他のアロケーターを打ち負かします. アプリケーションが 1 日中、スレッド A で 1 つの 8 バイト チャンクを malloc し、スレッド B でそれを解放するだけで、他に何も処理する必要がない場合は、メモリ アロケータを作成して、これまでに挙げたもの。他の多くの場合、それはあまり役に立ちません。:)
私は勤務先で Hoard を使用した経験があります (その経験の結果として、最近の 3.8 リリースで対処された、より目立たないバグの 1 つが発見されたほどです)。これは非常に優れたアロケーターですが、どれだけ優れているかはワークロードによって異なります。また、コードを GPL 化せずに商用プロジェクトで使用するには、Hoard に料金を支払う必要があります (ただし、それほど高価ではありません)。
非常にわずかに変更された ptmalloc2 は、かなり長い間 glibc の malloc の背後にあるアロケーターであり、信じられないほど広く使用され、テストされています。安定性が何よりも重要なら、それは良い選択かもしれませんが、リストに記載されていないので、アウトだと思います。特定のワークロードでは、これはひどいことですが、汎用的な malloc についても同じことが言えます。
お金を払っても構わないと思っているなら (そして、私の経験では価格が手頃なのであれば)、SmartHeap SMPも良い選択です。言及されている他のアロケーターのほとんどは、LD_PRELOAD できるドロップインの malloc/free new/delete 置換として設計されています。SmartHeap も同様に使用できますが、アロケーターを思いのままに微調整できる割り当て関連の API 全体も含まれています。私たちが行ったテスト (これもまた、特定のアプリケーションに非常に固有のものです) では、SmartHeap は、一時的な malloc の代替として機能する場合、Hoard とほぼ同じパフォーマンスでした。両者の本当の違いは、カスタマイズの程度です。アロケーターの汎用性が低いほど、パフォーマンスが向上します。
また、ユース ケースによっては、汎用のマルチスレッド アロケータをまったく使用したくない場合があります。すべて同じサイズのオブジェクトを常に malloc して解放している場合は、単純なスラブ アロケータを作成するだけでよいでしょう。スラブの割り当ては、Linux カーネルのいくつかの場所で、その説明に適合するように使用されています。(さらにいくつかの便利なリンクを提供しますが、私は「新しいユーザー」であり、スタックオーバーフローは、新しいユーザーが1つの回答で役に立たないようにすることを許可されていないと判断しました。ただし、Googleは十分に支援できます。)