1:什么是句柄?
句柄是整个windows编程的基础,一个句柄是指使用唯一的一个整数值,即一个4字节长的数值,来标识应用程序中不同对象和同类对象中的不同实例。
应用程序能通过句柄来访问相应的对象信息,但是句柄不是指针,程序不能通过句柄来直接阅读文件中的信息。
2:为什么要使用句柄?
windows之所以要建立句柄,根本上是源于windows内存管理机制的问题——虚拟地址。简单的来说数据的地址需要变动,变动以后就需要有人来记录管理变动,因此用句柄来记载数据地址的变更。
原理:因为windows的内存管理经常会将当期空闲对象的内存释放掉,当需要访问再重新提交到物理内存,所以对象的物理地址是变化的,不允许程序直接通过物理地址来访问对象。程序将想访问的对象的句柄传递给系统,系统根据句柄检索自己的对象列表就能知道程序想访问的对象及物理地址了。
分析:句柄是一种指向指针的指针。
所谓指针就是一种内存地址。应用程序启动以后,组成这个程序的各个对象是驻留在内存的。windows是一个以虚拟内存为基础的操作系统,在这种系统环境下,windows内存管理器经常在内存中来回移动对象,以此来满足各种应用程序的内存需要。对象被移动意味着它的地址发生了变化。
如何解决地址发生变化,却要找到这个对象的问题?
为了解决这个问题,windows操作系统为各个应用程序腾出一些内存地址,用来专门登记各应用对象在内中的地址变化,而这个地址(存储单元位置)本身是不变的。windows管理器移动对象在内存中的位置后,把对象新地址告知这个句柄地址来保存。这样我们就可以通过这个句柄地址间接的知道对象在内存中的位置。
3:句柄和指针有什么区别?
句柄和指针是两个不同的概念。windows系统用句柄标记系统资源,隐藏系统的信息。我们只需要调用就行了。指针则标记某个物理内存地址。