英語で読む

次の方法で共有


LocalAlloc 関数 (winbase.h)

ヒープから指定したバイト数を割り当てます。

メモ ローカル関数はオーバーヘッドが大きく、他のメモリ管理機能よりも機能が少なくなります。 新しいアプリケーションでは、ローカル 関数 を使用する必要があるとドキュメントに記載されていない限り、ヒープ関数を使用する必要があります。 詳細については、「 グローバル関数とローカル関数」を参照してください。
 

構文

DECLSPEC_ALLOCATOR HLOCAL LocalAlloc(
  [in] UINT   uFlags,
  [in] SIZE_T uBytes
);

パラメーター

[in] uFlags

メモリ割り当て属性。 既定値は LMEM_FIXED 値です。 このパラメーターには、特に記載されている互換性のない組み合わせを除き、次の値のうち 1 つ以上を指定できます。

意味
LHND
0x0042
LMEM_MOVEABLELMEM_ZEROINITを結合します。
LMEM_FIXED
0x0000
固定メモリを割り当てます。 戻り値は、メモリ オブジェクトへのポインターです。
LMEM_MOVEABLE
0x0002
移動可能なメモリを割り当てます。 メモリ ブロックは物理メモリ内では移動されませんが、既定のヒープ内で移動できます。

戻り値は、メモリ オブジェクトへのハンドルです。 ハンドルをポインターに変換するには、 LocalLock 関数を使用します。

この値を LMEM_FIXEDと組み合わせることはできません。

LMEM_ZEROINIT
0x0040
メモリの内容を 0 に初期化します。
LPTR
0x0040
LMEM_FIXEDLMEM_ZEROINITを組み合わせます。
00LHND
LMEM_MOVEABLEと同じです。
NONZEROLPTR
LMEM_FIXEDと同じです。
 

次の値は廃止されましたが、16 ビット Windows との互換性のために提供されています。 これらは無視されます。

LMEM_DISCARDABLE
LMEM_NOCOMPACT
LMEM_NODISCARD

[in] uBytes

割り当てるバイト数。 このパラメーターが 0 で 、uFlags パラメーター でLMEM_MOVEABLEが指定されている場合、この関数は破棄済みとしてマークされたメモリ オブジェクトへのハンドルを返します。

戻り値

関数が成功した場合、戻り値は新しく割り当てられたメモリ オブジェクトへのハンドルです。

関数が失敗した場合は、返される値は NULL です。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

Windows メモリ管理では、個別のローカル ヒープとグローバル ヒープは提供されません。 したがって、 LocalAlloc 関数と GlobalAlloc 関数は基本的に同じです。

移動可能メモリ フラグ LHNDLMEM_MOVABLEおよび NONZEROLHND は不要なオーバーヘッドを追加し、ロックを安全に使用する必要があります。 特にドキュメントで使用する必要があると記載されていない限り、避ける必要があります。

新しいアプリケーションでは、ドキュメントでローカル関数を使用する必要があることを具体的に示していない限り、 ヒープ 関数を使用する必要があります。 たとえば、一部の Windows 関数は 、LocalFree で解放する必要があるメモリを割り当てます。

要求を満たすのに十分な空き領域がヒープに含まれていない場合、 LocalAllocNULL を返します。 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

関連項目

グローバル関数とローカル関数

ヒープ関数

LocalFree

LocalLock

LocalReAlloc

LocalSize

メモリ管理関数