zoukankan      html  css  js  c++  java
  • winAPI 中 的 GlobalLock GlobalUnlock 的作用

         在项目中遇到GlobalLock  GlobalUnlock 这两个操作内存的函数。

         百度百科解释为:锁定内存中指定的内存块,并返回一个地址值,令其指向内存块的起始处。除非用 GlobalUnlock 函数将内存块解锁,否则地址会一直保持有效。msdn的说明:Locks a global memory object and returns a pointer to the first byte of the object's memory block.  讲的都比较简单。

          程序员看到的都是虚拟地址,操作系统将虚拟地址转化为物理地址,操作系统负责维护这个映射,当程序被挂起再装入内存时,就不一定会装入到原来的内存空间中,这时操作系统就要改变这个映射,当发生缺页中断时,也会改变映射,这些内存重定位对程序员都是透明的。

          跨进程空间访问内存,必须用GlobalLock将内存锁住,不许重定位,否则有可能发生错误。例如,进程与内核程序的地址空间是不同的,当进程要访问内核的某块内存,系统映射该进程的某逻辑地址到这块内存的物理地址,由于这块内存不属于该进程,当内核的这块内存被重定位后,系统不会更新进程的地址映射,导致错误,因此需要将内存锁住,不许移动,操作完成后再用GloballUnlock解锁。

  • 相关阅读:
    学习之路
    c
    为什么正确,还是有点bug?
    1212
    学习呀
    记录一下学习c语言的过程3.26日1
    字符串处理
    二维数组的转置
    一维数组转置
    Mybatis读取数据实战
  • 原文地址:https://www.cnblogs.com/panyihua/p/3985239.html
Copyright © 2011-2022 走看看