http://msdn.microsoft.com/en-us/library/ee292117.aspxとhttp://msdn.microsoft.com/en-us/library/ee292134.aspxで、Microsoftが特殊なマクロとクラスを提供していることがわかります。アロケータですが、各キャッシング戦略が何であるか、それらをどのように使用するかはわかりません。誰かがこれらの各パーツをいつ使用するかを説明できますか?
- キャッシュテンプレート
cache_freelist-cache_freelistテンプレートクラスは、サイズのメモリブロックの空きリストを維持しますSz。フリーリストがいっぱいになると、operator deleteメモリブロックの割り当てを解除するために使用されます。フリーリストが空の場合、operator new新しいメモリブロックを割り当てるために使用されます。フリーリストの最大サイズはmax class、パラメータで渡されたクラスによって決まりMaxます。各メモリブロックはSz、使用可能なメモリのバイトと、必要なデータをoperator new保持しますoperator delete。cache_suballoc-cache_suballocテンプレートクラスは、を使用して、割り当て解除されたメモリブロックを無制限の長さの空きリストに格納し、空きリストが空のときにfreelist<sizeof(Type), max_unbounded>割り当てられたより大きなチャンクからメモリブロックをサブ割り当てしoperator newます。各チャンクはSz * Nelts、使用可能なメモリのバイトと、必要なデータをoperator new保持しますoperator delete。割り当てられたチャンクが解放されることはありません。cache_chunklist-このテンプレートクラスはoperator new、生のメモリのチャンクを割り当てるために使用し、必要に応じてブロックをサブ割り当てしてメモリブロックにストレージを割り当てます。割り当て解除されたメモリブロックをチャンクごとに個別の空きリストに格納しoperator delete、メモリブロックが使用されていないときにチャンクの割り当てを解除するために使用します。各メモリブロックはSz、使用可能なメモリのバイトと、それが属するチャンクへのポインタを保持します。各チャンクはNelts、メモリブロック、3つのポインタ、int、operator newおよびoperator delete必要なデータを保持します。
私は自分でいくつかのアロケータを書いたが、このドキュメントはただ...紛らわしい。