LocalAlloc 関数 (winbase.h)
ヒープから指定したバイト数を割り当てます。
構文
DECLSPEC_ALLOCATOR HLOCAL LocalAlloc(
[in] UINT uFlags,
[in] SIZE_T uBytes
);
パラメーター
[in] uFlags
メモリ割り当て属性。 既定値は LMEM_FIXED 値です。 このパラメーターには、特に記載されている互換性のない組み合わせを除き、次の値のうち 1 つ以上を指定できます。
値 | 意味 |
---|---|
|
LMEM_MOVEABLEとLMEM_ZEROINITを結合します。 |
|
固定メモリを割り当てます。 戻り値は、メモリ オブジェクトへのポインターです。 |
|
移動可能なメモリを割り当てます。 メモリ ブロックは物理メモリ内では移動されませんが、既定のヒープ内で移動できます。
戻り値は、メモリ オブジェクトへのハンドルです。 ハンドルをポインターに変換するには、 LocalLock 関数を使用します。 この値を LMEM_FIXEDと組み合わせることはできません。 |
|
メモリの内容を 0 に初期化します。 |
|
LMEM_FIXEDとLMEM_ZEROINITを組み合わせます。 |
|
LMEM_MOVEABLEと同じです。 |
|
LMEM_FIXEDと同じです。 |
次の値は廃止されましたが、16 ビット Windows との互換性のために提供されています。 これらは無視されます。
- LMEM_DISCARDABLE
- LMEM_NOCOMPACT
- LMEM_NODISCARD
[in] uBytes
割り当てるバイト数。 このパラメーターが 0 で 、uFlags パラメーター でLMEM_MOVEABLEが指定されている場合、この関数は破棄済みとしてマークされたメモリ オブジェクトへのハンドルを返します。
戻り値
関数が成功した場合、戻り値は新しく割り当てられたメモリ オブジェクトへのハンドルです。
関数が失敗した場合は、返される値は NULL です。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
Windows メモリ管理では、個別のローカル ヒープとグローバル ヒープは提供されません。 したがって、 LocalAlloc 関数と GlobalAlloc 関数は基本的に同じです。
移動可能メモリ フラグ LHND、 LMEM_MOVABLE、 および NONZEROLHND は不要なオーバーヘッドを追加し、ロックを安全に使用する必要があります。 特にドキュメントで使用する必要があると記載されていない限り、避ける必要があります。
新しいアプリケーションでは、ドキュメントでローカル関数を使用する必要があることを具体的に示していない限り、 ヒープ 関数を使用する必要があります。 たとえば、一部の Windows 関数は 、LocalFree で解放する必要があるメモリを割り当てます。
要求を満たすのに十分な空き領域がヒープに含まれていない場合、 LocalAlloc は NULL を返します。 NULL はエラーを示すために使用されるため、仮想アドレス 0 は割り当てされません。 したがって、 NULL ポインターの使用を簡単に検出できます。
LocalAlloc 関数が成功すると、少なくとも要求された量が割り当てられます。 割り当てられた金額が要求された金額より大きい場合、プロセスは金額全体を使用できます。 割り当てられた実際のバイト数を確認するには、 LocalSize 関数を使用します。
メモリを解放するには、 LocalFree 関数を使用します。 GlobalFree を使用して LocalAlloc で割り当てられたメモリを解放しても安全ではありません。
例
次のコードは、 LocalAlloc と LocalFree の簡単な使用を示 しています。
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
void _cdecl _tmain()
{
LPTSTR pszBuf=NULL;
pszBuf = (LPTSTR)LocalAlloc(
LPTR,
MAX_PATH*sizeof(TCHAR));
// Handle error condition
if( pszBuf == NULL )
{
_tprintf(TEXT("LocalAlloc failed (%d)\n"), GetLastError());
return;
}
//see how much memory was allocated
_tprintf(TEXT("LocalAlloc allocated %d bytes\n"), LocalSize(pszBuf));
// Use the memory allocated
// Free the memory when finished with it
LocalFree(pszBuf);
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | winbase.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |