句柄是什么?

句柄是一个指向指针的指针,我们知道,指针中保存的是内存地址。那么一个指向指针的指针,它保存的就是另一个指针的地址,我们可以通过一个指针来找到另一个指针,再通过另一个指针访问到具体的数据,那么为什么要这么麻烦呢?
    我们知道,当运行一个占用大量内存的程序时,系统内存很快就会被填满,这时 Windows 就会自动将那些暂时不用的数据放到硬盘中,而这些数据所占的空间就是虚拟内存。打个比方,电脑剩余的内存只有1G,我们同时运行游戏和QQ,游戏占用1G内存,QQ占用100M内存,假如没有虚拟内存,那么QQ就不能运行,因为系统无法分配给QQ合适大小的内存,但是有了虚拟内存,那么就可以将游戏一些不常用的数据转移出来,放到虚拟内存中,比如保存到硬盘的一个叫做pagefile.sys的文件中,同时释放掉这些被转移的数据所占的内存空间,这样就有了足够的内存运行QQ,而当游戏运行到需要加载那些被转移的数据时,可以释放掉一些不常用的数据所占的空间,将其保存到硬盘文件pageflie.sys中,然后再读取pagefile.sys文件中关于游戏的数据,这样循环移动数据的过程就是微软的虚拟内存技术。
    我们看到,为了最大限度地使用物理内存,Windows 需要经常在物理内存和虚拟内存中来回移动数据,以此来满足各种应用程序的内存需要。数据被移动意味着它的地址发生了变化。假如我们仍然按照之前的地址来访问它,时会出错的,那么我们如何才能得到数据的真正地址呢?为解决这个问题,Windows 操作系统专门腾出来一块内存空间来保存数据在内存中的地址变化,Windows 操作系统每次移动数据后,都要把数据新的地址告诉这个内存空间来保存,而记录地址变化的这块内存空间的地址是保持不变的。
    我们把这个不变的地址叫做句柄,我们就可以通过该句柄找到指向数据最新地址的指针,然后再通过这个指针来访问数据。
    但是必须注意的是,程序每次重新启动,Windows 操作系统所分配的句柄是不一样的,这就好像每次抽奖都抽到不同的号码一样,当然也有可能抽到同一个号码,不过概率很低。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值