句柄简单来讲就是二维指针,也就是指针的指针
- 句柄用来标识一切可以标识的对象,一个socket,一个文件,一个窗口
既然说到标识,是怎么标识的呢
其实我们的程序的一次运行中,相应的虚拟内存有一块专门存放句柄的区域,这块区域存放的是另一个内存区域的地址,这样的话只是一级指针,试想一下,那么这个句柄找到的就是那个对象的首地址,假设这个对象就是一个文件吧,然后我们在文件里面增加了一点东西,那么文件的下一个对象的内存空间是不是就被占了?然后我们通过句柄找下一个对象的时候找到的不是下一个对象的首地址,而是上一个文件增加后的内容
所以,我们就需要在进行一个映射,句柄找到一个内存区域,这个内存区域并不直接存放对象,而是存放这一时刻真正的对象的内存地址,注意是这一时刻,因为程序在运行时经常变化,所以句柄指向的那块内存区域的值是经常变化的--也就是对象所在的区域是会变动的
注意:程序的一次运行称为进程,这次运行和下次运行对应的句柄一般是不同的,因为操作系统无法保证每次运行的内存空间都是那一块,这就涉及到程序装入内存的问题了