句柄的本质

介绍句柄前,先介绍指针。

或许你知道,指针的内容就是一个内存地址 ,通过指针的值,能找出所指向地址中的内容。

但很容易忽略的一点是:这个“内存地址”并不是真正的内存地址,而是经过操作系统映射过的。

做个实验,用VC分别创建两个工程,在工程一中创建一个整型指针 int  *p1 = 123; watch窗口看到这个p1 的值为

0x00d30000 ;调试工程二, 打开view->Debug windows->memory, 输入0x00d30000 ,能看出在工程二里,0x00d30000 地址的内容不是123.

所以说,指针指向的是虚拟内存。

>>>>>>

现在开始说句柄,句柄的类型是HANDLE, 

typedef void *HANDLE;

所以,HANDLE是指针类型。CreateFile(), CreateFileMapping()等函数返回值的类型是句柄类型。这些API函数返回的句柄指向了真正的内存地址,是由操作系统来管理的,因为内存的分配,常常会把某内存块的内容移动到另外的内存块中,当操作系统会把地址的改动报告给句柄。

另外,上面说的API返回的句柄值的地址内容是受到保护的,我们不能够接直访问得到,比如int a = *handle; 系统提示Access Violate错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值