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

GlobalAlloc

函数原型
GlobalAlloc(UINT uFLAG,DWORD dwBytes);
说明 
分配一个全局内存块 
返回值 
Long,返回全局内存句柄。零表示失败。会设置GetLastError 
参数表 
参数 类型及说明 
uFlags Long,对分配的内存类型进行定义的常数标志,如下所示: 
              GMEM_FIXED 分配一个固定内存块 
              GMEM_MOVEABLE 分配一个可移动内存块 
              GMEM_DISCARDABLE 分配一个可丢弃内存块 
              GMEM_NOCOMPACT 堆在这个函数调用期间不进行累积 
              GMEM_NODISCARD 函数调用期间不丢弃任何内存块 
              GMEM_ZEROINIT 新分配的内存块全部初始化成零 
dwBytes Long,要分配的字符数 
注解 
如指定了 GMEM_FIXED,那么返回值就是要使用的实际内存地址即指针(GlobalLock 会返回同样的值)——所以在使用固定内存块的时候不需要执行一个 GlobalLock/GlobalUnlock 操作
由于 Win32 采用了高级的内存管理方案,所以使用可移动的内存块并没有什么好处
用这个函数分配的内存块允许在8位边界以内

GlobalLock  
函数功能描述:锁定一个全局的内存对象,返回指向该对象的第一个字节的指针
函数原型
LPVOID GlobalLock( HGLOBAL hMem )
参数
hMem:全局内存对象的句柄。这个句柄是通过GlobalAlloc或GlobalReAlloc来得到的
返回值:
调用成功,返回指向该对象的第一个字节的指针
调用失败,返回NULL,可以用GetLastError来获得出错信息
注意:
调用过GlobalLock锁定一块内存区后,一定要调用GlobalUnlock来解锁。

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

(GlobalAlloc会从heap中分配所申请大小的一段内存,但是返回的只是一个这段内存的HANDLE,其他程序可能会在对内存进行操作的时候移动或者释放这段内存,为了防止这样的惨剧发生,可以调用GlobalLock将这段内存锁住,原理就是内存对象的内部数据结构有一个锁计数,这个有点像线程内核对象的UsageCount,只有当这个锁计数减为零时系统在需要时才会将这段内存移动或者释放掉(玩腻了,可以一脚踢开)。GlobalLock就是将锁计数加一,相反的,每次调用GlobalUnlock是将锁计数减一。简单点说GlobalAlloc表示你对这段内存有兴趣,不许释放掉;GlobalUnlock表示你已经把她玩厌了,释放不释放不关你的事,反正你对她没兴趣了。)

转载于:https://www.cnblogs.com/jinxiang1224/p/8468402.html

GlobalAlloca GlobalLock GlobalUnlock函数的作用相关推荐

  1. python函数的作用是_Python函数一

    函数 一.函数的作用 函数就是一段具有独立功能的代码块整合到一个整体并命名,在需要的位置调用这个名称即可完成对应的需求 函数在开发过程中,可以更高效的实现代码重用 二,函数的使用步骤 2.1 定义函数 ...

  2. python中匿名函数的作用_Python 中的匿名函数,你会用吗

    原标题:Python 中的匿名函数,你会用吗 概念 我们从一个例子引入. 这里有一个元素为非空字符串的列表,按字符串最后一个字母将列表进行排序.如果原列表是 ['abc', 'g', 'def'],则 ...

  3. java中的string函数_java中string.trim()函数的作用实例及源码

    trim()的作用:去掉字符串首尾的空格. public static void main(String arg[]){ String a=" hello world "; Str ...

  4. VC++ inline内联函数的作用解决方案

    VC++ inline内联函数的作用解决方案 __attribute__((always_inline)) attribute((always_inline))的意思是强制内联,所有加了attribu ...

  5. C语言中内联函数的作用 inline

    C语言中内联函数的作用 inline C语言中内联函数到底有什么作用? 试想一下,每当我们在假设就在主函数中调用另外一个函数的时候,那么这个函数就要入栈或者出栈,比如说下面的一个例子: 点击(此处)折 ...

  6. python主函数的作用_python中main函数的用法

    原博文 2020-03-27 20:25 − **什么场景下会有main函数?** 当该python脚本被作为模块(module)引入(import)时,其中的main()函数将不会被执行. **ma ...

  7. 【Android 逆向】ptrace 函数 ( C 标准库 ptrace 函数简介 | ptrace 函数真实作用 )

    文章目录 一.C 标准库 ptrace 函数简介 二.ptrace 函数真实作用 一.C 标准库 ptrace 函数简介 ptrace 函数 : 在 C 标准库 中有一个 ptrace 函数 , 该函 ...

  8. STM32中NVIC_SystemReset()函数的作用?什么时候用?

    STM32中NVIC_SystemReset()函数的作用?什么时候用? STM32软件复位有两种方式 (1)方式一:NVIC_SystemReset()函数用来复位STM32. 注意1:从SYSRE ...

  9. Softmax 函数及其作用(含推导)

    Softmax函数的定义及作用 Softmax是一种形如下式的函数: P(i)=exp(θTix)∑Kk=1exp(θTkx) 其中 θi和x是列向量, θTix可能被换成函数关于x的函数 fi(x) ...

最新文章

  1. Nature:AI为什么总是歧视重重?
  2. [转载]关于Android ProGuard混淆学习记录
  3. reactjs 兄弟通信,父子通信
  4. TF之pix2pix:基于TF利用Facades数据集训练pix2pix模型、测试并进行生成过程全记录
  5. 浩鲸科技携手阿里云原生共同打造“场域运营数字化解决方案”
  6. python中直方图-Numpy,Python中的“拉伸”直方图(级别)
  7. 不要等到离职,才明白这些道理
  8. B9.流行的框架与新技术
  9. Router.use() requires a middleware function but got a Object
  10. 高德地图+Serverless 护航你的假日出行
  11. 光标函数的使用 gotoxy()
  12. xmlspy_XMLSpy是免费的吗? 我说天堂的甘露。
  13. 51单片机温度控制调速风扇仿真设计
  14. pikachu靶场 暴力破解 sql注入详解
  15. 大二C#实现酒店管理系统(C端展示、前台操作、登记入住、入住管理、职位管理、公告系统等)
  16. 郑捷 机器学习算法与编程实践 --ID3决策树 python3 代码
  17. 王艾辉:下方重点关注3140 上方3190 破位则追
  18. pytorch报错“RuntimeError: DataLoader worker (pid 83709) is killed by signal: Bus error. It is .......“
  19. ffmpeg批量转换m4a为mp3
  20. wave和pyaudio读取wav语音文件并播放

热门文章

  1. apache配置反向代理(通过不同端口访问不同目录)
  2. MTP 多媒体传输协议
  3. 性能测试如何定位瓶颈?偶发超时?看高手如何快速排查问题
  4. 图文并茂的带你彻底理解悲观锁与乐观锁
  5. 欠阿里云一分钱,会是什么样的后果。。。
  6. 关于重构,看此文就够了
  7. Java 5~11各个版本新特性史上最全总结
  8. dva 中的响应编程
  9. Spring Boot—SpringMVC自动配置原理以及扩展和全面接管SpringMVC
  10. java添加时间,如何通过Java中的addHours()方法添加时间