windows句柄的详解

本文属于文摘,是我从论坛上看到一个答复得到。对windows句柄的解释很到位,很贴切。

原文摘引如下:

从广义上,能够从一个数值拎起一大堆数据的东西都可以叫做
句柄。句柄的英文是“Handle”,本义就是“柄”,只是在计算机
科学中,被特别地翻译成“句柄”,其实还是个“柄”。从一个小
东西拎起一大堆东西,这难道不想个“柄”吗?
        然后,指针其实也是一种“句柄”,只是由于指针同时拥有更
特殊的含义——实实在在地对应内存里地一个地址——所以,通常
不把指针说成是“句柄”。但指针也有着能从一个32位的值引用到
一大堆数据的作用,这不是句柄又是什么?
        Windows系统中有许多内核对象(这里的对象不完全等价于“面
向对象程序设计”一词中的“对象”,虽然实质上还真差不多),
比如打开的文件,创建的线程,程序的窗口,等等。这些重要的对
象肯定不是4个字节或者8个字节足以完全描述的,他们拥有大量的
属性。为了保存这样一个“对象”的状态,往往需要上百甚至上千
字节的内存空间,那么怎么在程序间或者程序内部的子过程(函数)
之间传递这些数据呢?拖着这成百上千的字节拷贝来拷贝去吗?显然
会浪费效率。那么怎么办?当然传递这些对象的首地址是一个办法,
但这至少有两个缺点:
          1。暴露了内核对象本身,使得程序(而不是操作系统内核)
也可以任意地修改对象地内部状态(首地址都知道了,还有什么不
能改的?),这显然是操作系统内核所不允许的;
          2。操作系统有定期整理内存的责任,如果一些内存整理过一
次后,对象被搬走了怎么办?
        所以,Windows操作系统就采用进一步的间接:在进程的地址空
间中设一张表,表里头专门保存一些编号和由这个编号对应一个地
址,而由那个地址去引用实际的对象,这个编号跟那个地址在数值
上没有任何规律性的联系,纯粹是个映射而已。
        在Windows系统中,这个编号就叫做“句柄”。

为表示对作者的尊重,作者的博客地址:http://hi.csdn.net/gumbour

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值