GlobalReAlloc

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

GlobalReAlloc函数更改指定的全局内存对象的大小或属性。尺寸可以增减。

HGLOBAL GlobalReAlloc(

HGLOBAL 【HMEM】,//处理全局内存对象
DWORD 【dwBytes】,//块的新大小
UINT 【uFlags】//如何重新分配对象
); 

参数

【HMEM】

标识要重新分配的全局内存对象。该句柄由GlobalAllocGlobalReAlloc功能返回。

【dwBytes】

指定内存块的新大小(以字节为单位)。如果此参数为零,并且【uFlags】参数指定了GMEM_MOVEABLE标志,该函数将返回标记为已丢弃的内存对象的句柄。如果【uFlags】指定了GMEM_MODIFY标志,则此参数将被忽略。

【uFlags】

指定如何重新分配全局内存对象。如果指定了GMEM_MODIFY标志,则该参数将修改内存对象的属性,并忽略【dwBytes】参数。否则,此参数控制内存对象的重新分配。

GMEM_MODIFY标志可以与以下标志中的一个或两者相结合:

含义
GMEM_DISCARDABLE如果还指定了GMEM_MODIFY标志,则分配可丢弃的内存。该标志被忽略,除非该对象先前被分配为可移动的,或者也指定了GMEM_MOVEABLE标志。
GMEM_MOVEABLE仅限Windows NT:如果还指定了GMEM_MODIFY标志,则将固定的内存对象更改为可移动内存对象。

如果此参数未指定GMEM_MODIFY,则可以是以下标志的任意组合:

含义
GMEM_MOVEABLE如果【dwBytes】为零,则丢弃以前可移动和可废弃的内存块。如果对象的锁定计数不为零,或者块不可移动和可丢弃,则该函数失败。

如果【dwBytes】非零,则使系统能够将重新分配的块移动到新位置,而不会更改内存对象的可移动或固定属性。如果对象是固定的,返回的句柄可能与【HMEM】参数指定的句柄不同。如果对象是可移动的,即使对象当前被GlobalLock功能的先前调用锁定,也可以移动块而不使句柄无效。要获取内存块的新地址,请使用GlobalLock.

GMEM_NOCOMPACT防止内存被压缩或丢弃以满足分配请求。
GMEM_ZEROINIT如果内存对象的大小不断增加,则会使额外的内存内容初始化为零。

返回值

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

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

备注

如果GlobalReAlloc重新分配可移动对象,则返回值是内存对象的句柄。要将句柄转换为指针,请使用GlobalLock函数。

如果GlobalReAlloc重新分配固定对象,返回的句柄的值是内存块的第一个字节的地址。要访问内存,进程可以简单地将返回值转换为指针。

如果GlobalReAlloc失败,原始内存不会被释放,原来的句柄和指针仍然有效。

也可以看看

GlobalAlloc, GlobalFree, GlobalLock