C/C++学习笔记21:句柄与指针

1:什么是句柄?

句柄是整个windows编程的基础,一个句柄是指使用唯一的一个整数值,即一个4字节长的数值,来标识应用程序中不同对象和同类对象中的不同实例。

应用程序能通过句柄来访问相应的对象信息,但是句柄不是指针,程序不能通过句柄来直接阅读文件中的信息。

2:为什么要使用句柄?

windows之所以要建立句柄,根本上是源于windows内存管理机制的问题——虚拟地址。简单的来说数据的地址需要变动,变动以后就需要有人来记录管理变动,因此用句柄来记载数据地址的变更。


原理:因为windows的内存管理经常会将当期空闲对象的内存释放掉,当需要访问再重新提交到物理内存,所以对象的物理地址是变化的,不允许程序直接通过物理地址来访问对象。程序将想访问的对象的句柄传递给系统,系统根据句柄检索自己的对象列表就能知道程序想访问的对象及物理地址了。


分析:句柄是一种指向指针的指针。

所谓指针就是一种内存地址。应用程序启动以后,组成这个程序的各个对象是驻留在内存的。windows是一个以虚拟内存为基础的操作系统,在这种系统环境下,windows内存管理器经常在内存中来回移动对象,以此来满足各种应用程序的内存需要。对象被移动意味着它的地址发生了变化。

如何解决地址发生变化,却要找到这个对象的问题

为了解决这个问题,windows操作系统为各个应用程序腾出一些内存地址,用来专门登记各应用对象在内中的地址变化,而这个地址(存储单元位置)本身是不变的。windows管理器移动对象在内存中的位置后,把对象新地址告知这个句柄地址来保存。这样我们就可以通过这个句柄地址间接的知道对象在内存中的位置。


3:句柄和指针有什么区别?
句柄和指针是两个不同的概念。windows系统用句柄标记系统资源,隐藏系统的信息。我们只需要调用就行了。指针则标记某个物理内存地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值