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