All bytes must be within the maximum size specified by CreateFileMapping

MapViewOfFile 中

误区1,dwNumberOfBytesToMap 必须是64K的整数倍,也就是系统内存分配粒度的整数倍

实际:MSDN中并没有写这个要求,而是仅指定了dwFileOffsetLow 必须是64K的整数倍;实验证明确实不需要

问题2, All bytes must be within the maximum size specified by CreateFileMapping

实际:“所有的字节必须在CreateFileMapping指定的最大尺寸之内”,

也就是说dwFileOffsetHigh/Low  + dwNumberOfBytesToMap 不能超过dwMaximumSizeHigh/Low

如果超过了,函数会失败,返回NULL

也就是说,不能映射不存在的内容,——和CreateFileMapping不能映射0字节文件一致

也就是说,不存在MapViewOfFile实际返回内存长度 不等于 dwNumberOfBytesToMap 的情况

实验证明上述内容

 

注意3,MapViewOfFile能成功,需要依赖系统中连续的、未被预定的内存长度,所以有失败的可能。

实际:映射内存越长,失败几率越大,所以不要想当然的用。要准备分页的方式分部分映射

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值