2011-03-31 星期四 晴朗

今天jojo突然问我们:“什么叫做句柄?”。我对句柄不是很清楚(Win32下没有怎么编过程),但是我对文件描述符是比较清楚的。但是我觉得应该是差不多的,所以我就这么回答她了:“句柄应该类似与Unix下的文件描述符,是一个内核对象标识。根据这个标识,进程可以访问相应的内核对象。至于为什么不直接返回内核对象地址,原因我想有两个:

  1. 内核对象驻留在内核地址空件,而进程没有权限访问内核地址空间。C标准库中的File对象返回指针,那是因为它是用户库。
  2. 不给定内存地址,有利于内核(用户进程也一样)做内存空间调整和优化,而保持对外部透明。很多数据库存储引擎,就是这么实现的——一种称之为slotted page的技术。

晚饭的时候跟几个同事一起讨论了一下,发现很多人都认死数组偏移量其实就是地址,在编译器实现上是这样的,但是对于应用程序来说却不是这样的。

PS:看源码看多了,你会发现很多程序喜欢隐藏实现细节,大量用了typedef XXX YYY。有个英文单词叫做“欧派奇”(具体拼写我忘记了)

–EOF–