LocalAlloc,This function allocates the specified number of bytes from the heap.
格式
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函数去检测被分配的字节数。
对于分配的可移动内存、可删除内存读取前需加锁(
相关函数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.