posts - 274,  comments - 1258,  trackbacks - 0
所谓句柄实际上是一个数据,是一个Long (整长型)的数据。

句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。

从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。

如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?

为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。


句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象


本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。


但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。
 
posted on 2006-07-04 11:14 踏雪赤兔 阅读(10083) 评论(9)  编辑 收藏 引用 所属分类: 个人词典

FeedBack:
# re: 计算机中的“句柄”是什么意思?
2006-07-15 10:00 | queenie
第一次了解  回复  更多评论
  
# re: 计算机中的“句柄”是什么意思?
2008-07-22 23:07 | V0860
句柄是 具体对象[数据块] 描述符 的指针,也就是 说有一块内存区域保存了最终数据,而为了对这个数据进行操作,我们需要针对其构造一个描述结构体,这个结构体称为描述符,而这个描述符的指针就是那个该死的难以理解的所谓句柄,我们国家的汉语文化真的出现问题了,至少在科技领域,就存在着语言问题,有很多从外来翻译过来的词不达意的词语,严重的阻碍了我们的科技进步,V0860语。其中一个可以想到的原因是技术还比较落后,另外一个原因就是我们对这个问题的关注太缺乏了。也许有一天,我们可以有这么一个组织来关注这个问题,改善这个状况。  回复  更多评论
  
# re: 计算机中的“句柄”是什么意思?[未登录]
2009-01-07 16:24 | sun
非常好
感谢  回复  更多评论
  
# re: 计算机中的“句柄”是什么意思?
2009-04-21 10:58 | kabu
感谢赐教  回复  更多评论
  
# re: 计算机中的“句柄”是什么意思?
2009-08-19 16:42 | 111
非常好  回复  更多评论
  
# re: 计算机中的“句柄”是什么意思?
2010-03-28 02:58 | u
解释得很透彻  回复  更多评论
  
# re: 计算机中的“句柄”是什么意思?
2010-04-20 10:48 |
受教了  回复  更多评论
  
# re: 计算机中的“句柄”是什么意思?
2010-06-08 13:22 | sjs
非常精辟  回复  更多评论
  
# re: 计算机中的“句柄”是什么意思?
2013-08-21 18:13 | 130215124
没事别在这里误导人行不行,还句柄是一种指向指针的指针,二级指针就不是指针了?新人都别被误导了,句柄虽然也是用来找到一块内存,但绝对不是指针,和指针一点关系没有  回复  更多评论
  
只有注册用户登录后才能发表评论。

百度空间| 见闻日记| 编程感悟
我的twitter


LOGO

自我介绍:百度厂基础平台车间的一名挨踢民工。擅长C++、算法、语言设计、分布式计算,也用过Java,Python, PHP,JS/AS等语言开发。请关注我的twitter (免翻墙版) 发QQ消息


添加到收藏夹 Locations of visitors to this page

常用链接

随笔分类(300)

随笔档案(274)

文章分类(38)

相册

收藏夹(54)

与博主互动

博客手拉手

搜索

  •  

积分与排名

  • 积分 - 400129
  • 排名 - 10

最新评论

阅读排行榜

评论排行榜