Share via


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 パラメーターで指定された対応する値がオーバーライドされます。

意味
HEAP_NO_SERIALIZE
0x00000001
シリアル化されたアクセスは使用されません。 詳細については、「解説」を参照してください。

この関数のすべての呼び出しでシリアル化されたアクセスが無効になっていることを確認するには、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

関連項目

ヒープ関数

HeapAlloc

HeapReAlloc

メモリ管理関数

VBS エンクレーブで使用できる Vertdll API