クイズの質問のようですね...
より高速で無駄のない割り当て
最も一般的な理由は、動的に割り当てる必要のある小さなオブジェクトがたくさんあることです。固定サイズのオブジェクト用のカスタムアロケータは、一般的なアロケータよりも割り当てのオーバーヘッドがはるかに少なく、断片化の影響を受けず、通常は高速です。(また、これらの割り当てがメインヒープから削除されると、メインヒープの断片化には寄与しなくなります)。
同様に、非解放アロケータ(複数のオブジェクトを割り当てることはできますが、それらを一緒に解放することはできませんが、組み合わせてのみ)は、可能な限り最速の割り当てスキームであり、オーバーヘッドはありません(まれなケースでの配置を除く)。変更せず、全体として削除するだけのデータ構造を構築している場合は、理にかなっています。
他のベースアロケータ
別のアプリケーションは、C++ヒープとは異なるヒープから割り当てています。オブジェクト内のデータは、他のプロセスと交換するために共有メモリに割り当てる必要があるか、所有権を取得して特定のアロケータの使用を要求するシステム関数に渡す必要がある場合があります。(これには、すべてのサブオブジェクトに同じメカニズムを実装する必要があることに注意してください。これを実現する一般的な方法はありません)。
同様に(私が使用している場合)、その場でコードを作成する場合です。最近では、このメモリページのデータの実行が許可されていることをOSに通知する必要がありますが、このメモリはかなり大きなチャンク(4Kなど)で取得されます。繰り返しになりますが、実行権限を持つOSからページ(4K)を要求し、その上に多くの小さなオブジェクトを割り当てます-新しい配置を使用します。