GlobalAlloc

【勇芳软件工作室】汉化HomePreviousNext

GlobalAlloc函数从堆中分配指定的字节数。在线性Win32 API环境中,本地堆和全局堆之间没有区别。

HGLOBAL GlobalAlloc(

UINT 【uFlags】,//对象分配属性
DWORD 【dwBytes】//要分配的字节数
); 

参数

【uFlags】

指定如何分配内存。如果指定为零,则默认值为GMEM_FIXED。除了特别注明的不兼容的组合外,还可以使用以下标志的任何组合。要指示功能是分配固定或可移动内存,请指定前四个标志之一:

含义
GMEM_FIXED分配固定内存该标志不能与GMEM_MOVEABLE或GMEM_DISCARDABLE标志组合。返回值是指向内存块的指针。要访问内存,调用进程只需将返回值转换为指针即可。
GMEM_MOVEABLE分配可移动内存该标志不能与GMEM_FIXED标志组合。返回值是内存对象的句柄。句柄是调用进程私有的32位数。要将句柄转换为指针,请使用GlobalLock函数。
GPTR结合GMEM_FIXED和GMEM_ZEROINIT标志。
GHND结合GMEM_MOVEABLE和GMEM_ZEROINIT标志。
GMEM_DDESHARE分配用于DDE会话的动态数据交换(DDE)功能使用的内存。与Windows版本3不同。【x】,这个内存不是全局共享的。但是,该标志可用于兼容性目的。某些应用程序可能会使用它来增强DDE操作的性能,因此如果要将内存用于DDE,则应该进行指定。

只有使用DDE或剪贴板进行进程间通信的进程才应指定此标志。

GMEM_DISCARDABLE分配可丢弃的内存。该标志不能与GMEM_FIXED标志组合。一些基于Win32的应用程序可能会忽略此标志。
GMEM_LOWER忽略。此标志仅用于与Windows版本3兼容。【x】.
GMEM_NOCOMPACT不压缩或丢弃内存以满足分配请求。
GMEM_NODISCARD不丢弃内存以满足分配请求。
GMEM_NOT_BANKED忽略。此标志仅用于与Windows版本3兼容。【x】.
GMEM_NOTIFY忽略。此标志仅用于与Windows版本3兼容。【x】.
GMEM_SHARE与GMEM_DDESHARE标志相同。
GMEM_ZEROINIT将内存初始化为零。

【dwBytes】

指定要分配的字节数。如果此参数为零,并且【uFlags】参数指定了GMEM_MOVEABLE标志,该函数将返回一个被标记为已丢弃的内存对象的句柄。

返回值

如果函数成功,则返回值是新分配的内存对象的句柄。

如果函数失败,返回值为NULL。要获取扩展错误信息,请调用GetLastError.

备注

如果堆不包含足够的可用空间来满足请求,则GlobalAlloc返回NULL。

由于NULL用于指示错误,因此不会分配虚拟地址零。因此,很容易检测到NULL指针的使用。

所有内存都是通过执行访问创建的;不需要特殊功能来执行动态生成的代码。

使用此函数分配的内存将保证在8字节边界上对齐。

GlobalAllocLocalAlloc功能限于每个进程的GMEM_MOVEABLE和LMEM_MOVEABLE内存的总共65,536个句柄。此限制不适用于GMEM_FIXED或LMEM_FIXED内存。

如果此函数成功,则至少分配所请求的内存量。如果分配的实际数量大于请求的数量,则该过程可以使用全部金额。要确定实际分配的字节数,请使用GlobalSize功能。

也可以看看

GlobalFree, GlobalLock, GlobalReAlloc, GlobalSize, LocalAlloc