パラメータ
uFlags
確保するメモリのタイプを指定する。0 を指定すると、既定値として LMEM_FIXED
フラグがセットされる。互換性のない組み合わせを除け
ば、次のフラグを組み合わせて指定することができる。
この関数が固定メモリと移動可能メモリのどちらを確保するかを指定するには、最初の 6 つのフラグのいずれかを指定する。
フラグ
|
意味
|
LMEM_FIXED |
固定メモリを確保する。メモリオブジェクトへのポインタが戻り値として返る。 |
LMEM_MOVEABLE
|
移動可能メモリを確保する。Win32
では、物理メモリ内のメモリブロックは移動することはないが、既定のヒープ内では移動が可能である。
メモリオブジェクトのハンドルが戻り値として返る。このハンドルをポインタに変換するには、LocalLock 関数を使う。
このフラグを LMEM_FIXED フラグと組み合わせることはできない。 |
LPTR |
LMEM_FIXED フラグと LMEM_ZEROINIT
フラグを組み合わせたものと同じである。 |
LHND |
LMEM_MOVEABLE フラグと LMEM_ZEROINIT
フラグを組み合わせたものと同じである。 |
NONZEROLHND |
LMEM_MOVEABLE フラグと同じである。 |
NONZEROLPTR |
LMEM_FIXED フラグと同じである。 |
LMEM_DISCARDABLE
|
無視される。このフラグは、16 ビット版 Windows
との互換性のために提供されている。
Win32 で廃棄可能ブロックを確保するには、LocalDiscard 関数を明示的に呼び出さなければならない。
このフラグを LMEM_FIXED フラグと組み合わせることはできない。 |
LMEM_NOCOMPACT |
無視される。このフラグは、16 ビット版 Windows
との互換性のために提供されている。 |
LMEM_NODISCARD |
無視される。このフラグは、16 ビット版 Windows
との互換性の目的のために提供されている。 |
LMEM_ZEROINIT |
メモリの内容を 0 に初期化する。 |
uBytes
確保するバイト数を指定する。0 を指定し、uFlags パラメータに LMEM_MOVEABLE
フラグがセットされている場合、この関数は廃棄とマ
ークされているメモリオブジェクトのハンドルを返す。
戻り値
関数が成功すると、新しく確保されたメモリオブジェクトのハンドルが返る。
関数が失敗すると、NULL が返る。拡張エラー情報を取得するには、GetLastError 関数を使う。
解説
要求を満たすための十分な空き領域がヒープに残っていない場合、LocalAlloc 関数は NULL
を返す。エラーを示すために NULL が使わ
れているので、仮想アドレス 0 が使われることは決してない。そのため、NULL ポインタを使ってこれを簡単に検出できる。
関数が成功すると、少なくとも要求された量のメモリが確保される。確保された量が要求された量よりも多い場合、プロセスでは確保された
量全体を利用することができる。実際に確保された量を調べるには、LocalSize 関数を使う。
メモリを解放するには、LocalFree 関数を使う。
Windows 95/98:ヒープマネージャは、4MB 未満のメモリブロックを扱うように設計されている。メモリブロックが
1MB または 2MB より大きく
なることが予期される場合、代わりに VirtualAlloc 関数または VirtualAllocEx
関数を使うと、パフォーマンスの大幅な低下を防止すること
がでる。
|