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

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

*buf_hdl = (char *)GlobalAlloc(GPTR, (size_t)buf_getsize);

*buf_data_p = (char *)GlobalLock(*buf_hdl)

(void)memcpy(((struct Rpc_bufhed *)buf_data_p)->eye,
buf_id,sizeof(((struct Rpc_bufhed *)buf_data_p)))

GlobalUnlock(*buf_hdl);

到网上些调查的资料

rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">

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操作系不干。如果存在下列情况,即堆中有101K的空闲块这时如果 直接申一个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表示未加或已

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值