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能成功,需要依赖系统中连续的、未被预定的内存长度,所以有失败的可能。

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

 

posted @ 2011-07-20 17:18  kevinzhwl  阅读(149)  评论(0编辑  收藏  举报