现在的位置: 首页 > 综合 > 正文

通过句柄、指针、内存看变化

2013年11月04日 ⁄ 综合 ⁄ 共 954字 ⁄ 字号 评论关闭

句柄:

  标识程序中不同对象和同类对象的不同实例的个数。如:一个窗口、图标、输入、输出设备、控件、文件等。

为什么句柄:

  方便内存变更管理,源于虚拟存地址。数据的地址需要变动,使用句柄来记录管理这个变动。

句柄管理:

  有些数据、对象独到内存后,如果长时间不用或者其他的原因,会有专门的内存管理方法,致使这个内存的真是地址发生转变,被挤到硬盘中,这块儿硬盘叫做虚拟内存。

系统为进程分配了一个固定的地址,用于专门存放数据最新真是位置。数据发生移动后,会有专门的数据管理对象,来更新存放数据位置的表示数据,这个专门的固定的位置就是句柄。


句柄和指针的区别:

  指针包含的是引用对象的内存地址;句柄是由操作系统管理的引用标识,该标识可以被系统重新定位到一个内存地址上。简单的说,句柄就是指向指针的指针。

  指针是指向内存地址的,指针的指向会发生变化,也就是说,数据在内存中的位置和指针之间的关系会发生变化,而句柄则是指针的指针,它记录的是数据最新的指针。存放指针的这个句柄是不会发生变化的,可以这么理解,数据和句柄的对应关系是固定的,指针是连接两者之间的一条线,数据的地址会发生变化,当数据被移动到某个地方的时候,就和指向那块儿地址的指针之间发生了新的关系,丢掉了原有地址指针关系,数据会把最新的和它匹配的指针,提交给数据管理对象,数据管理对象把这个指针更新到句柄和数据之间的一一对应关系。

  值得注意的是:同一个对象句柄,在不同的进程中会有不同的标识id,可能的算法是这样的:

  不同的进程有自己的句柄和对象指针表,而进程在对句柄的获取则是通过这个对应关系在表中的位置,故,不同的对应关系表,就有不同的索引。

句柄有什么用:

  应用程序可以通过句柄访问对象的相应信息,但句柄不是指针,程序不能使用句柄来操作对象,如,读取文件信息。如果句柄不用在I/O文件中,是毫无用途的。


句柄中的思想:

  操作系统对句柄的管理实质是隔离变化的一种方法,我们可以理解成,低层的数据是在变化的,在低层和高层之间,通过建立一个动态的对应关系,但是有一个不变的东西对应这个一直变化,并由一个专门的对象来维护这个关系。而为了便于跟好的管理,还将这个对应关系加入到一个表索引中。

  简言之,操作系统对于内存地址的控制、指针和句柄的管理,不失为一种解决变化的不错思路。


抱歉!评论已关闭.