LocalAlloc函数从堆中分配指定大小的字节数

来源:互联网 发布:notepad配置python 编辑:程序博客网 时间:2024/06/08 19:26
LocalAlloc,This function allocates the specified number of bytes from the heap.
这个函数从堆中分配指定大小的字节数。
HLOCAL LocalAlloc(
UINT uFlags,
UINT uBytes
);
参数
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。
备注:
该函数用局部内存对象的分配(全局内存对象的分配使用函数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.

阅读全文
0 0
原创粉丝点击