LocalAlloc

ten dicates dicates

This function allocates the specified number of bytes from the heap.
這個函式從堆中分配指定大小的位元組數。
格式:
HLOCAL LocalAlloc(
UINT uFlags,
UINT uBytes
);
Parameters uFlags [in] Specifies how to allocate memory. If zero is specified, the default is the LMEM_FIXED flag. The following table shows the flags for this parameter. The parameter is one of these flags. ValueDescriptionLMEM_FIXED Allocates fixed memory. The return value is a pointer to the memory object.LPTR Combines the LMEM_FIXED and LMEM_ZEROINIT flags.LMEM_ZEROINIT Initializes memory contents to zero.uBytes [in] Specifies the number of bytes to allocate.
參數
uFlags[in]指定怎樣去分配記憶體。如果zero被指定,默認的是LMEM_FIXED標誌。此參數有三種標誌:
LMEM_FIXED:分配固定記憶體,返回值是指向一個記憶體對象的指針
LMEM_ZEROINIT:初始化記憶體內容為zero。
LPTR:結合了LMEM_FIXED和LMEM_ZEROINIT這兩種標誌。
LMEM_MOVEABLE:分配可移動記憶體。
LMEM_DISCARDABLE:分配可刪除的記憶體。
uBytes:[in]指定要分配的位元組數。
Return Values
A handle to the newly allocated memory object indicates success.
NULL indicates failure.
To get extended error information, call GetLastError.
返回值:成功則返回一個指向新分配的記憶體對象的句柄。
NULL表明函式失敗。
要得到更多的錯誤信息的話,調用GetLastError。
Remarks
If the heap does not contain sufficient free space to satisfy the request, LocalAlloc returns NULL. Because NULL is used to indicate an error, virtual address zero is never allocated. Therefore, it is easy to detect the use of a NULL pointer.
If this function succeeds, it allocates at least the amount requested. If the amount allocated is greater than the amount requested, the process can use the entire amount.
To determine the number of bytes allocated, use the LocalSize function.
To free the memory, use the LocalFree function.
For Windows CE versions 1.0 and 1.01, the local heap for each process cannot exceed 1 MB. However, a process can create multiple heaps using the HeapCreate function and each heap can be up to 1 MB.
For Windows CE versions 1.0 through 2.12, allocating memory approximately 0 to 7 bytes under 192K in size causes the corresponding call to LocalFree to fail for certain memory blocks in this size range. The return code is ERROR_INVALID_PARAMETER.
備註:
該函式用局部記憶體對象的分配(全局記憶體對象的分配使用函式GlobalAlloc)。
如果堆中沒有充足的自由空間去滿足我們的需求,LocalAlloc返回NULL。因為NULL被使用去表明一個錯誤,虛擬地址zero從不被分配。因此,很容易去檢測NULL指針的使用。
如果函式成功的話,它至少會分配我們指定大小的記憶體。如果分配給我們的數量多於我們指定的話,這個進程能使用整個數量的記憶體。
可以使用LocalSize函式去檢測被分配的位元組數。
可以使用LocalFree函式去釋放這段記憶體。
對於分配的可移動記憶體、可刪除記憶體讀取前需加鎖(相關函式LocalLock)否則將無法正常讀取,讀取完成後需解鎖(相關函式LocalUnlock)否則無法使用LocalFree函式來釋放記憶體。
對於Windows CE versions 1.0 and 1.01,每個進程的本地堆不能超過1MB。然而,一個進程能夠使用HeapCreate函式創建多個堆,而且每個堆分配的位元組能最大能達到1MB。
對於Windows CE版本1.0到2.12,分配在192K數量範圍內的約為0到7個位元組的大小記憶體――在這一尺寸範圍的某些記憶體塊――引起相應的調用LocalFree失敗。返回的代碼是ERROR_INVALID_PARAMETER。
Requirements
OS Versions: Windows CE 1.0 and later.
Header: Winbase.h.
Link Library: Coredll.lib.

相關詞條

相關搜尋

熱門詞條

聯絡我們