HeapSize 関数 (heapapi.h)
HeapAlloc 関数または HeapReAlloc 関数によってヒープから割り当てられたメモリ ブロックのサイズを取得します。
構文
SIZE_T HeapSize(
[in] HANDLE hHeap,
[in] DWORD dwFlags,
[in] LPCVOID lpMem
);
パラメーター
[in] hHeap
メモリ ブロックが存在するヒープへのハンドル。 このハンドルは、 HeapCreate 関数または GetProcessHeap 関数によって返されます。
[in] dwFlags
ヒープ サイズ オプション。 次の値を指定すると、HeapCreate 関数を使用してヒープが作成されたときに flOptions パラメーターで指定された対応する値がオーバーライドされます。
値 | 意味 |
---|---|
|
シリアル化されたアクセスは使用されません。 詳細については、「解説」を参照してください。
この関数のすべての呼び出しでシリアル化されたアクセスが無効になっていることを確認するには、HeapCreate の呼び出しで HEAP_NO_SERIALIZE を指定します。 この場合、この関数呼び出しで HEAP_NO_SERIALIZE をさらに指定する必要はありません。 この値は、プロセス ヒープにアクセスするときに指定しないでください。 システムは、アプリケーションのプロセス内に、プロセス ヒープに同時にアクセスする追加のスレッド (Ctrl + C ハンドラーなど) を作成する場合があります。 |
[in] lpMem
関数が取得するサイズを持つメモリ ブロックへのポインター。 これは、 HeapAlloc 関数または HeapReAlloc 関数によって返されるポインター です 。 メモリ ブロックは 、hHeap パラメーターで指定されたヒープからである必要があります。
戻り値
関数が成功した場合、戻り値は、割り当てられたメモリ ブロックの要求されたサイズ (バイト単位) です。
関数が失敗した場合、戻り値は です (SIZE_T)-1
。 関数は SetLastError を呼び出しません。 アプリケーションは、拡張エラー情報 に対して GetLastError を呼び出すことができません。
lpMem パラメーターが、hHeap パラメーターで指定されたヒープ内にないヒープ割り当てを参照している場合、HeapSize 関数の動作は未定義です。
注釈
シリアル化により、2 つ以上のスレッドが同じヒープからブロックを同時に割り当てたり解放したりしようとすると、相互の除外が保証されます。 シリアル化にはパフォーマンス コストは小さくなりますが、複数のスレッドが同じヒープからメモリを割り当てて解放するたびに使用する必要があります。 HEAP_NO_SERIALIZE値を設定すると、ヒープの相互除外がなくなります。 シリアル化を行わないと、同じヒープ ハンドルを使用する 2 つ以上のスレッドが同時にメモリの割り当てまたは解放を試みる可能性があり、ヒープが破損する可能性があります。 したがって、HEAP_NO_SERIALIZE値は、次の状況でのみ安全に使用できます。
- プロセスに含まれるスレッドは 1 つだけです。
- プロセスには複数のスレッドがありますが、特定のヒープのヒープ関数を呼び出すスレッドは 1 つだけです。
- プロセスには複数のスレッドがあり、アプリケーションは特定のヒープに対する相互除外のための独自のメカニズムを提供します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | heapapi.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |