LocalAlloc函数从堆中分配指定的字节数。在线性Win32 API环境中,本地堆和全局堆之间没有区别。
HLOCAL LocalAlloc(
UINT 【uFlags】, | //分配属性 |
UINT 【指向包含要写入文件的数据的缓冲区。】 | //要分配的字节数 |
); |
参数
【uFlags】
指定如何分配内存。如果指定为零,则默认值为LMEM_FIXED标志。除了具体注明的不兼容的组合外,还可以指定以下标志的任意组合。要指示功能是分配固定或可移动内存,请指定前六个标志之一:
旗 | 含义 | ||||
LMEM_FIXED | |||||
分配固定内存该标志不能与LMEM_MOVEABLE或LMEM_DISCARDABLE标志组合。返回值是指向内存块的指针。要访问内存,调用进程只需将返回值转换为指针即可。 | |||||
LMEM_MOVEABLE | |||||
分配可移动内存该标志不能与LMEM_FIXED标志组合。返回值是内存对象的句柄。句柄是调用进程私有的32位数。要将句柄转换为指针,请使用LocalLock功能。 | |||||
LPTR | |||||
组合LMEM_FIXED和LMEM_ZEROINIT标志。 | |||||
LHND | |||||
组合LMEM_MOVEABLE和LMEM_ZEROINIT标志。 | |||||
NONZEROLHND | |||||
与LMEM_MOVEABLE标志相同。 | |||||
NONZEROLPTR | |||||
与LMEM_FIXED标志相同。 | |||||
LMEM_DISCARDABLE | |||||
分配可丢弃的内存。该标志不能与LMEM_FIXED标志组合。一些基于Win32的应用程序可能会忽略此标志。 | |||||
LMEM_NOCOMPACT | |||||
不压缩或丢弃内存以满足分配请求。 | |||||
LMEM_NODISCARD | |||||
不丢弃内存以满足分配请求。 | |||||
LMEM_ZEROINIT | |||||
将内存初始化为零。 |
【指向包含要写入文件的数据的缓冲区。】
指定要分配的字节数。如果此参数为零,并且【uFlags】参数指定LMEM_MOVEABLE标志,该函数将返回一个被标记为已丢弃的内存对象的句柄。
返回值
如果函数成功,则返回值是新分配的内存对象的句柄。
如果函数失败,返回值为NULL。要获取扩展错误信息,请调用GetLastError.
备注
如果堆不包含足够的可用空间来满足请求,LocalAlloc返回NULL。
GlobalAlloc和LocalAlloc功能限于每个进程的GMEM_MOVEABLE和LMEM_MOVEABLE内存的总共65,536个句柄。此限制不适用于GMEM_FIXED或LMEM_FIXED内存。
如果此函数成功,则至少分配所请求的数量。如果分配的金额大于所要求的金额,则该过程可以使用整个金额。要确定分配的实际字节数,请使用LocalSize功能。
也可以看看