GlobalAlloc

中文名 GlobalAlloc
作用 从堆中分配一定数目的字节数
目录导航

语法

HGLOBALGlobalAlloc(

UINTuFlags, // 分配属性(方式)

DWORDdwBytes // 分配的字节数

);

参数

uFlags

指定如何分配内存,若指定为0,则是默认的GMEM_FIXED.这个值可以是下面其中一个或几个位标识(那些指明不兼容的组合除外)

标识的含意

标识    意义   
GHND 为GMEM_MOVEABLE 和 GMEM_ZEROINIT的组合.
GMEM_FIXED 分配固定的内存,返回值是一个指针.
GMEM_MOVEABLE 分配可移动的内存,在Win32中内存块在 物理内存中是不可移动的,但在缺省堆中可以. 返回值是该内存对象的 句柄,可使用函数 GlobalLock 将该句柄转换为一个 指针. 这个标识不能与 GMEM_FIXED 组合使用.
GMEM_ZEROINIT 将所申请内存初始化为0.
GPTR 为GMEM_FIXED和GMEM_ZEROINIT组合.

以下标识已经过时,均被忽略。这些标识只是为与16位Windows相兼容而提供的:

GMEM_DDESHARE:

这个标识是为与16位Windows兼容而提供的,一些应用程序可使用该标识加强DDE操作的功能因此当内存用于DDE时可使用此标识.

[DDE说明:DDE 是Dynamic Data Exchange 即 动态数据交换。是 16 位 Windows 时代实现不同应用程序之间互相交换数据和控制的技术 ]

GMEM_DISCARDABLE 标识

这个标识只是为与 16 位 Windows 相兼容而提供的。在 Win32 中你必须显式地调用函数 GlobalDiscard 以抛弃一块内存。这个标识可与 GMEM_FIXED 组合使用。

GMEM_LOWER

GMEM_NOCOMPACT

GMEM_NODISCARD

GMEM_NOT_BANKED

GMEM_NOTIFY

指定要申请的字节数.若该参数为 0 且参数 uFlags 指定为 GMEM_MOVEABLE 则该函数返回一个内存对象的 句柄,该内存对象被标识为discarded(可抛弃的)。

返回值

标识    意义   
GHND 为GMEM_MOVEABLE 和 GMEM_ZEROINIT的组合.
GMEM_FIXED 分配固定的内存,返回值是一个指针.
GMEM_MOVEABLE 分配可移动的内存,在Win32中内存块在 物理内存中是不可移动的,但在缺省堆中可以. 返回值是该内存对象的 句柄,可使用函数 GlobalLock 将该句柄转换为一个 指针. 这个标识不能与 GMEM_FIXED 组合使用.
GMEM_ZEROINIT 将所申请内存初始化为0.
GPTR 为GMEM_FIXED和GMEM_ZEROINIT组合.

注解

若函数调用成功,则返回一个新分配的内存对象的 句柄。

若函数调用失败,则返回 NULL。可调用 GetLastError以获得更多错误信息。

需求

如果堆内没有足够的空间满足请求,函数将返回 NULL.因为NULL是用于标明错误的,所以不会分配虚拟0地址.

因此很容易检测出是否在使用一个NULL 指针。

使用此函数分配内存可以保证8字节的边界.所有的内存均在执行访问时创建;不需要特别的函数来动态执行所产生的代码。

若 函数调用成功,将至少分配所需内存.若实际分配量超过所需,则内存仍然能够充分利用之.可用函数 GlobalSize 来确定实际所分配的字节数。

可使用 GlobalFree 来释放内存。

相关百科
返回顶部
产品求购 求购