MapViewOfFile函数使用老出错?

daixuefeng203 2008-10-20 10:02:28
LPBYTE pbFile = (LPBYTE)MapViewOfFile(m_hfilemap,FILE_MAP_ALL_ACCESS, 
(DWORD)(m_qwFileOffset >> 32), (DWORD)(m_qwFileOffset & 0xFFFFFFFF),
dwBlockBytes);

dwBlockBytes为数据块长度
刚开始m_qwFileOffset 设为零时运行正常

但我改为大于0的数如6000000他就运行失败

请问高手这是为什么呢?

有谁能帮我万分感激!!!
...全文
190 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
herman~~ 2008-10-27
  • 打赏
  • 举报
回复
4K 是硬盘一簇的大小啦
mLee79 2008-10-27
  • 打赏
  • 举报
回复
按道理是跟操作系统有关, 所以用 GetSystemInfo 得到 PageSize 是比较保险的 ...
八过偶从来就没见过其他的 PageSize , X86的MMU支持 4K/2M/4M 的页表, 不过没见过哪个操作系统不是4K的...
daixuefeng203 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mLee79 的回复:]
映射时的偏移必须对齐在页表边界上, 通常是4K ... 也就是必须满足 m_qwFileOffset % 4K == 0 ...
[/Quote]
必须是4K吗?是不是会和操作系统有关呢?
mLee79 2008-10-21
  • 打赏
  • 举报
回复
映射时的偏移必须对齐在页表边界上, 通常是4K ... 也就是必须满足 m_qwFileOffset % 4K == 0 ...
daixuefeng203 2008-10-21
  • 打赏
  • 举报
回复
应该不是你说的问题,m_qwFileOffset 我给的值很小,高位有右移运算,所以高位为零的。
  • 打赏
  • 举报
回复
刚才说的有点错误,是文件的大小.不是内存中的大小
:D
  • 打赏
  • 举报
回复
LPVOID WINAPI MapViewOfFile(
__in HANDLE hFileMappingObject,
__in DWORD dwDesiredAccess,
__in DWORD dwFileOffsetHigh,
__in DWORD dwFileOffsetLow,
__in SIZE_T dwNumberOfBytesToMap
);

dwFileOffsetHigh
A high-order DWORD of the file offset where the view begins.

也就是说,这个是高DWORD字节和后面的dwFileOffsetLow相加 比如这个是0x100;dwFileOffsetLow是0;
那么大小就是
0x100 00000000;算起来也有个几百G了. 早已经超过32程序的内存地址范围了.

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧