句柄

句柄的作用:源于内存管理机制的问题---虚拟地址,数据的地址需要变动,变动以后需要有人来记录管理变动。系统利用句柄来记录数据地址的变动。

数据对象加载入内存,便获得了内存地址,但这个地址不固定。因为数据对象需要在内存和硬盘之间移动。

例如:不常用的数据会为常用数据让出其占用的内存空间,进而被淘汰进硬盘的虚拟内存之中,达到优化系统整体配置资源,提升效率性能。

系统为进程分配固定的地址(句柄)。

句柄与普通指针的区别:

指针:包含引用对象的内存地址。句柄:有系统管理的引用标识,可以被系统重新定位到一个内存地址上。

WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口、控件、位图、GDI对象。

句柄就是一个标示符,用来标识对象或者项目,譬如车牌号,每辆注册过的车都会有一个确定的号码,不同的车号码不同,也可能不同时期会有相同号码的车辆,只不过不会处于同一时期。

句柄类似于指向指针的指针,所谓指针就是一种内存地址。

指针通俗的说就是内存编号,通过它可以直接对内存操作,地址不变,每次操作的物理位置绝对不变。

句柄--指的是指向系统资源的位置,这些资源的位置真的不变,是内存中一块固定不变的地方,专门用来登记各种应用程序的对象在内存中的地址变化,windows内存管理器移动了对象在内存中的位置后,会把该对象新的地址告知对应的句柄进行更新,通过句柄就可以知道对象具体在内存中的哪个位置上了,这个地址是对象装载(Load),当对象卸载时又释放给系统(Unload)。


同一时间有些资源被换出内存,一些被换回,同一资源在系统不同时刻,物理位置是不确定的,内存就是物理地址。


内核对象句柄,是用来标识某一个内核对象的一个ID,同一个对象的该ID在每个进程中是不同的。


内存管理单元(MMU)负责将虚拟地址映射为物理地址。

windows内存管理管理的其实都是句柄,通过句柄来管理指针。

windows的句柄指向的结构类似如下:

struct

{

int  pointer;  //指针段

int  count; //内核计数段

int attribute; //文件属性段,shared等等

int    memAttribute; //内存属性段,MOVABLE,FIXED等等

.............................................

};


句柄的作用:

(1)、管理内存地址变动,同时还有内核对象访问级别,文件是否打开等等。

 (2)、指向指针的指针,还有管理内存内存地址和其他功能的作用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值