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
必要なデータを保持します。
私は自分でいくつかのアロケータを書いたが、このドキュメントはただ...紛らわしい。