VC中GlobalAlloc,GlobalLock,GlobalUnlock的使用及其说明

这项我是在跟踪一个句柄参数时,用到的内存分配函 数,之前从来没有用过,所以到网上做了些调查

 

 


到网上些调查的资料

GlobalAlloc 函 数分配一 内存, 函数会返回分配的内存句柄。
GlobalLock 函 数 定内存 函数接受一个内存句柄 作 参数,然后返回一个指向被 定的内存 的指您可以用 写内存。
GlobalUnlock 函数来解 先前被 定的内存, 函数使得指向内存 的指 无效。
GlobalFree 函数来 放内存 。您必 须 传给该 函数一个内存句柄。

GlobalAlloc

分配一个全局内存
返回
Long
,返回全局内存句柄。零表示失 。会 GetLastError
参数表
参数 型及
wFlags Long
分配的内存 行定 的常数 志,如下所示:
             GMEM_FIXED
分配一个固定内存
             GMEM_MOVEABLE
分配一个可移 内存
             GMEM_DISCARDABLE
分配一个可 弃内存
             GMEM_NOCOMPACT
堆在 个函数 用期 行累
             GMEM_NODISCARD
函数 用期 弃任何内存
             GMEM_ZEROINIT
新分配的内存 全部初始化成零
dwBytes Long
,要分配的字符数
注解  
如指定了 GMEM_FIXED ,那 返回 就是要使用的 实际 内存地址即指 GlobalLock 会返回同 —— 所以在使用固定内存 候不需要 行一个 GlobalLock/GlobalUnlock 操作
由于 Win32 采用了高 的内存管理方案,所以使用可移 的内存 并没有什
个函数分配的内存 8 界以内
【附】 GlobalAlloc 问题
--------------------------------------------------------------------------------
:在使用 GlobalAlloc 分配一个全局内存 块时 ,使用 GMEM_FIXED 分配一个固定内存 与使用 GMEM_MOVEABLE 分 配一个可移 内存 到底有什 不同? ( 具 体 点 )
其效率上是否也存在差异?
在有些源 中,再使用 GMEM_MOVEABLE 志分配内存 ,将使用 GlobalFree 其返回的内存句柄 放操作的 句注 掉,或者干脆就不写? 道是不需要 这 么
--------------------------------------------------------------------------------
答: GMEM_MOVEABLE 是允 操作系 (或者 用程序) 内存堆的管理,在必要 ,操作系 可以移 内存 块获 取更大的 ,或者合并一些空 的内存 ,也称 垃圾回收 ,它可 以提高内存的利用率。一般情况下,内存堆空 是由用 来管理的, windows 操作系 不干 。如果存在下列情况,即堆中有 10 1K 的空 闲块 这时 如果 直接申 一个 5K 的内存空 ,会得到不成功的信息。但如果其它已 被占用的内存 movable 这时 就可以移 动 这 些内存 ,合并出一个 5k 的内存 ,并成功分配 使用。它的空 效率是以运行 时间 效率 代价的。

GlobalLock  
函数功能描述: 定一个全局的内存 象,返回 指向该对 象的第一个字 的指
函数原型:
LPVOID GlobalLock( HGLOBAL hMem )
参数:
hMem
:全局内存 象的句柄。 个句柄是通 GlobalAllocGlobalReAlloc 来得到的
返回
用成功,返回指向该对 象的第一个字 的指
用失 ,返回NULL ,可 以用GetLastError 得出 信息
注意:
GlobalLock 定一 内存区后,一定要GlobalUnlock 来解

GlobalUnlock
函数功能描述 : 解除被 定的全局内存
函数原型: BOOL GlobalUnlock( HGLOBAL hMem );
参数: hMem :全局内存 象的句柄
返回
非零 ,指定的内存 象仍 于被 定状
0
,函数 行出 ,可以用 GetLastError 得出 信息,如果返回 NO_ERROR 表示内存 象已
注意:     个函数 实际 コレ将内存 象的 数器减一,如果 数器不 0 表示 多个 GlobalLock 函数来 对这 个内存 象加 ,需要 对应 数目的 GlobalUnlock 函数来解
   
如果通 GetLastError 函数返回错 误码为 ERROR_NOT_LOCKED 表示未加 或已

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值