C++ visualc&x2B+;6 MFC MapViewOfFile返回错误代码8

C++ visualc&x2B+;6 MFC MapViewOfFile返回错误代码8,c++,mfc,visual-c++-6,pagefile,file-mapping,C++,Mfc,Visual C++ 6,Pagefile,File Mapping,我有一个程序正在创建一个映射文件,它可以很好地调用,m_hMap=CreateFileMapping(m_hFile,0,dwProtect,0,m_dwMapSize,NULL),但当后续函数调用MapViewOfFile(m_hMap,dwViewAccess,0,0,0)时,我得到一个错误代码8,即错误内存不足,或错误字符串“错误内存不足,无法处理此命令” 所以我不完全理解MapViewOfFile为我做了什么,以及如何修复这种情况 一些数字 m_dwMapSize = 453427200

我有一个程序正在创建一个映射文件,它可以很好地调用,
m_hMap=CreateFileMapping(m_hFile,0,dwProtect,0,m_dwMapSize,NULL),但当后续函数调用
MapViewOfFile(m_hMap,dwViewAccess,0,0,0)
时,我得到一个错误代码8,即错误内存不足,或错误字符串“错误内存不足,无法处理此命令”

所以我不完全理解MapViewOfFile为我做了什么,以及如何修复这种情况

一些数字

m_dwMapSize = 453427200
dwProtect = PAGE_READWRITE;
dwViewAccess = FILE_MAP_ALL_ACCESS;

我认为我的页面大小是
65536

如果文件非常大,要读取它,建议将其分成小块读取,然后处理每一块。MapViewOfFile函数用于映射内存中的一个片段


查看需要偏移量以正确执行其工作,即,如果您想读取一个非常大的文件。主要是由于碎片和相关原因,超大内存请求失败。

您尝试映射的文件有多大?我假设您只打算映射文件的前~432MB,对吗?无论如何,您的进程是否有足够的虚拟内存来映射文件?默认情况下,32位windows上的限制是2GB。因此,它似乎正在创建和销毁内存视图,并根据需要不断增长,如果它试图最终将整个内容加载到内存中,我也不会感到惊讶。那么m_hMap=CreateFileMapping(m_hFile,0,dwProtect,0,m_dwMapSize,NULL)是什么呢;做什么?没有分配内存吗?您可以将MapViewOfFile想象为您正在打开的文件的malloc+memcpy,仅此而已(在引擎盖下,情况正好相反:malloc可以使用平板内存映射)。所以MapViewOfFile通常只选择一个地址,它可以在内存中连续容纳文件视图的字节。