句柄是什么?
2016-04-08 19:59
465 查看
句柄是一个指向指针的指针,我们知道,指针中保存的是内存地址。那么一个指向指针的指针,它保存的就是另一个指针的地址,我们可以通过一个指针来找到另一个指针,再通过另一个指针访问到具体的数据,那么为什么要这么麻烦呢?
我们知道,当运行一个占用大量内存的程序时,系统内存很快就会被填满,这时 Windows 就会自动将那些暂时不用的数据放到硬盘中,而这些数据所占的空间就是虚拟内存。打个比方,电脑剩余的内存只有1G,我们同时运行游戏和QQ,游戏占用1G内存,QQ占用100M内存,假如没有虚拟内存,那么QQ就不能运行,因为系统无法分配给QQ合适大小的内存,但是有了虚拟内存,那么就可以将游戏一些不常用的数据转移出来,放到虚拟内存中,比如保存到硬盘的一个叫做pagefile.sys的文件中,同时释放掉这些被转移的数据所占的内存空间,这样就有了足够的内存运行QQ,而当游戏运行到需要加载那些被转移的数据时,可以释放掉一些不常用的数据所占的空间,将其保存到硬盘文件pageflie.sys中,然后再读取pagefile.sys文件中关于游戏的数据,这样循环移动数据的过程就是微软的虚拟内存技术。
我们看到,为了最大限度地使用物理内存,Windows 需要经常在物理内存和虚拟内存中来回移动数据,以此来满足各种应用程序的内存需要。数据被移动意味着它的地址发生了变化。假如我们仍然按照之前的地址来访问它,时会出错的,那么我们如何才能得到数据的真正地址呢?为解决这个问题,Windows 操作系统专门腾出来一块内存空间来保存数据在内存中的地址变化,Windows 操作系统每次移动数据后,都要把数据新的地址告诉这个内存空间来保存,而记录地址变化的这块内存空间的地址是保持不变的。
我们把这个不变的地址叫做句柄,我们就可以通过该句柄找到指向数据最新地址的指针,然后再通过这个指针来访问数据。
但是必须注意的是,程序每次重新启动,Windows 操作系统所分配的句柄是不一样的,这就好像每次抽奖都抽到不同的号码一样,当然也有可能抽到同一个号码,不过概率很低。
我们知道,当运行一个占用大量内存的程序时,系统内存很快就会被填满,这时 Windows 就会自动将那些暂时不用的数据放到硬盘中,而这些数据所占的空间就是虚拟内存。打个比方,电脑剩余的内存只有1G,我们同时运行游戏和QQ,游戏占用1G内存,QQ占用100M内存,假如没有虚拟内存,那么QQ就不能运行,因为系统无法分配给QQ合适大小的内存,但是有了虚拟内存,那么就可以将游戏一些不常用的数据转移出来,放到虚拟内存中,比如保存到硬盘的一个叫做pagefile.sys的文件中,同时释放掉这些被转移的数据所占的内存空间,这样就有了足够的内存运行QQ,而当游戏运行到需要加载那些被转移的数据时,可以释放掉一些不常用的数据所占的空间,将其保存到硬盘文件pageflie.sys中,然后再读取pagefile.sys文件中关于游戏的数据,这样循环移动数据的过程就是微软的虚拟内存技术。
我们看到,为了最大限度地使用物理内存,Windows 需要经常在物理内存和虚拟内存中来回移动数据,以此来满足各种应用程序的内存需要。数据被移动意味着它的地址发生了变化。假如我们仍然按照之前的地址来访问它,时会出错的,那么我们如何才能得到数据的真正地址呢?为解决这个问题,Windows 操作系统专门腾出来一块内存空间来保存数据在内存中的地址变化,Windows 操作系统每次移动数据后,都要把数据新的地址告诉这个内存空间来保存,而记录地址变化的这块内存空间的地址是保持不变的。
我们把这个不变的地址叫做句柄,我们就可以通过该句柄找到指向数据最新地址的指针,然后再通过这个指针来访问数据。
但是必须注意的是,程序每次重新启动,Windows 操作系统所分配的句柄是不一样的,这就好像每次抽奖都抽到不同的号码一样,当然也有可能抽到同一个号码,不过概率很低。
相关文章推荐
- Dungeon Master
- SAX解析与DOM解析对比
- [学习OpenCV攻略][016][RedHat下安装OpenCV]
- 线程通信
- poj 3159 Candies
- marquee
- POJ 2429 GCD & LCM Inverse
- bzoj2141 树状数组套Treap树
- android 图片文字轮播效果(图片和文字自动滚动)
- HDU 5446 Unknown Treasure Lucas+CRT
- DNS 理论
- 浅谈inode
- javascript中Uint8Array类型的subarray方法陷阱
- c++学习笔记(一)--如何在mac 下编译c文件
- poj2761(Treap)
- 求阶乘
- poj 2152 Fire 树形dp
- Android简单获取手机联系人姓名电话号码
- leetcode:Contains Duplicate
- 纸片:二分法