次の方法で共有


断片化の少ないヒープ

[このトピックの情報は、Windows Server 2003 および Windows XP に適用されます。 Windows Vista 以降、システムはメモリ割り当て要求を処理するために必要に応じて低断片化ヒープ (LFH) を使用します。 アプリケーションでは、ヒープに対して LFH を有効にする必要はありません。

ヒープの断片化は、使用可能なメモリが小さく、連続しないブロックに分割される状態です。 ヒープがフラグメント化されると、ヒープ内の使用可能なメモリの合計が要求を満たすのに十分な場合でも、メモリ割り当てが失敗する可能性があります。これは、メモリのブロックが 1 つでも十分な大きさがないためです。 低断片化ヒープ (LFH) は、ヒープの断片化を減らすのに役立ちます。

LFH は別のヒープではありません。 代わりに、アプリケーションがヒープに対して有効にできるポリシーです。 LFH が有効になっている場合、システムは特定の事前に定義されたサイズでメモリを割り当てます。 アプリケーションが LFH が有効になっているヒープからメモリ割り当てを要求すると、システムは、要求されたサイズを格納するのに十分な大きさの最小のメモリ ブロックを割り当てます。 現在の実装では、LFH が有効になっているかどうかにかかわらず、システムは約 16 KB を超える割り当てに LFH を使用しません。

アプリケーションでは、呼び出し元プロセスの既定のヒープまたはアプリケーションが作成した プライベート ヒープ に対してのみ LFH を有効にする必要があります。 ヒープの LFH を有効にするには、 GetProcessHeap 関数を使用して呼び出し元プロセスの既定のヒープへのハンドルを取得するか、 HeapCreate 関数によって作成されたプライベート ヒープへのハンドルを使用します。 次に、 ハンドルを使用して HeapSetInformation 関数を呼び出します。

LFH は、HEAP_NO_SERIALIZEで作成されたヒープまたは固定サイズで作成されたヒープでは有効にできません。 LFH は、Windows またはアプリケーション検証ツールのデバッグ ツールでヒープ デバッグ ツールを使用している場合にも有効にできません。

ヒープに対して LFH を有効にした後は、無効にすることはできません。

LFH の恩恵を最も受けるアプリケーションは、メモリを頻繁に割り当て、16 KB を下回るさまざまな割り当てサイズを快適に使用するマルチスレッド アプリケーションです。 ただし、すべてのアプリケーションが LFH の恩恵を受けるわけではありません。 アプリケーションで LFH を有効にした場合の影響を評価するには、パフォーマンス プロファイル データを使用します。