句柄的作用:源于内存管理机制的问题---虚拟地址,数据的地址需要变动,变动以后需要有人来记录管理变动。系统利用句柄来记录数据地址的变动。
数据对象加载入内存,便获得了内存地址,但这个地址不固定。因为数据对象需要在内存和硬盘之间移动。
例如:不常用的数据会为常用数据让出其占用的内存空间,进而被淘汰进硬盘的虚拟内存之中,达到优化系统整体配置资源,提升效率性能。
系统为进程分配固定的地址(句柄)。
句柄与普通指针的区别:
指针:包含引用对象的内存地址。句柄:有系统管理的引用标识,可以被系统重新定位到一个内存地址上。
WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口、控件、位图、GDI对象。
句柄就是一个标示符,用来标识对象或者项目,譬如车牌号,每辆注册过的车都会有一个确定的号码,不同的车号码不同,也可能不同时期会有相同号码的车辆,只不过不会处于同一时期。
句柄类似于指向指针的指针,所谓指针就是一种内存地址。
指针通俗的说就是内存编号,通过它可以直接对内存操作,地址不变,每次操作的物理位置绝对不变。
句柄--指的是指向系统资源的位置,这些资源的位置真的不变,是内存中一块固定不变的地方,专门用来登记各种应用程序的对象在内存中的地址变化,windows内存管理器移动了对象在内存中的位置后,会把该对象新的地址告知对应的句柄进行更新,通过句柄就可以知道对象具体在内存中的哪个位置上了,这个地址是对象装载(Load),当对象卸载时又释放给系统(Unload)。
同一时间有些资源被换出内存,一些被换回,同一资源在系统不同时刻,物理位置是不确定的,内存就是物理地址。
内核对象句柄,是用来标识某一个内核对象的一个ID,同一个对象的该ID在每个进程中是不同的。
内存管理单元(MMU)负责将虚拟地址映射为物理地址。
windows内存管理管理的其实都是句柄,通过句柄来管理指针。
windows的句柄指向的结构类似如下:
struct
{
int pointer; //指针段
int count; //内核计数段
int attribute; //文件属性段,shared等等
int memAttribute; //内存属性段,MOVABLE,FIXED等等
.............................................
};
句柄的作用:
(1)、管理内存地址变动,同时还有内核对象访问级别,文件是否打开等等。
(2)、指向指针的指针,还有管理内存内存地址和其他功能的作用。
3122

被折叠的 条评论
为什么被折叠?



