当前位置:首页 科普知识 GlobalAlloc

GlobalAlloc

发布时间:2023-09-14 01:05:26

GlobalAlloc是一个Windows API函数。该函数从堆中分配一定数目的字节数。Win32内存管理器并不提供相互分开的局部和全局堆。提供这个函数只是为了与16位的Windows相兼容。简称全局堆分配

GlobalAlloc介绍

GlobalAlloc是一个Windows API函数。该函数从堆中分配一定数目的字节数。Win32内存管理器并不提供相互分开的局部和全局堆。提供这个函数只是为了与16位的Windows相兼容。简称全局堆分配

GlobalAlloc语法

HGLOBALGlobalAlloc(

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

DWORDdwBytes // 分配的字节数

);

GlobalAlloc参数

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时可使用此标识.

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

GMEM_LOWER

GMEM_NOCOMPACT

GMEM_NODISCARD

GMEM_NOT_BANKED

GMEM_NOTIFY

dwBytes

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

GlobalAlloc返回值

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

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

GlobalAlloc注解

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

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

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

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

可使用 GlobalFree 来释放内存。

GlobalAlloc需求

客户端

需要Windows XP、Windows 2000 Professional、Windows NT Workstation、Windows Me、Windows 98或Windows 95.

服务器

需要Windows Server 2003、Windows 2000 Server或Windows NT Server.

头文件

在Winbase.h中声明,包含于Windows.h.

库文件

link to Kernel32.lib.

DLL

需要Kernel32.dll.

温馨提示:
本文【GlobalAlloc】由作者 爱百科 转载提供。 该文观点仅代表作者本人, 自学教育网 信息发布平台,仅提供信息存储空间服务, 若存在侵权问题,请及时联系管理员或作者进行删除。
(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6