HeapCompact 関数 (heapapi.h)
指定したヒープ内でコミットされた最大の空きブロックのサイズを返します。 空き グローバル フラグで
構文
SIZE_T HeapCompact(
[in] HANDLE hHeap,
[in] DWORD dwFlags
);
パラメーター
[in] hHeap
ヒープへのハンドル。 このハンドルは、
[in] dwFlags
ヒープ アクセス オプション。 このパラメーターには、次の値を指定できます。
戻り値
関数が成功した場合、戻り値はヒープ内の最大コミット済みフリー ブロックのサイズ (バイト単位) です。
関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、GetLastError
ヒープに空き領域がまったく存在しない場合、関数の戻り値は 0 で、GetLastError
備考
HeapCompact 関数は、主にデバッグに役立ちます。 通常、システムは、HeapFree 関数が呼び出されるたびにヒープを圧縮し、HeapCompact 関数はヒープ内で最大の空きブロックのサイズを返しますが、ヒープをさらに圧縮しません。 デバッグ中に Disable heap coalesce on free グローバル フラグが設定されている場合、システムはヒープを圧縮せず、HeapCompact 関数を呼び出すとヒープが圧縮されます。 グローバル フラグの詳細については、GFlags ドキュメントを参照してください。
HeapCompactによって返されるサイズのメモリ ブロック
シリアル化により、2 つ以上のスレッドが同じヒープからブロックを同時に割り当てまたは解放しようとしたときに、相互の除外が保証されます。 シリアル化にはパフォーマンス コストは小さくなりますが、複数のスレッドが同じヒープからメモリを割り当てて解放するたびに使用する必要があります。 HEAP_NO_SERIALIZE 値を設定すると、ヒープでの相互の除外がなくなります。 シリアル化を使用しない場合、同じヒープ ハンドルを使用する 2 つ以上のスレッドが同時にメモリの割り当てまたは解放を試み、ヒープの破損を引き起こす可能性があります。 したがって、HEAP_NO_SERIALIZE 値は、次の状況でのみ安全に使用できます。
- プロセスにはスレッドが 1 つだけ含まれます。
- プロセスには複数のスレッドがありますが、特定のヒープのヒープ関数を呼び出すスレッドは 1 つだけです。
- プロセスには複数のスレッドがあり、アプリケーションは特定のヒープに対して相互に除外するための独自のメカニズムを提供します。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows XP [デスクトップ アプリ |UWP アプリ] |
サポートされる最小サーバー | Windows Server 2003 [デスクトップ アプリ |UWP アプリ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | heapapi.h (Windows.h を含む) |
ライブラリ | Kernel32.lib |
DLL | Kernel32.dll |
関連項目
HeapCreate の
HeapValidate の
VBS エンクレーブ で使用できる Vertdll API