LocalAlloc(转)

这个函数从堆中分配指定大小的字节数。   

格式: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]指定要分配的字节数。

返回值:成功则返回一个指向新分配的内存对象的句柄。   

            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。

posted @ 2011-03-29 10:41  董雨  阅读(773)  评论(0编辑  收藏  举报