在虚拟地址空间足够的情况下内存映射大文件失败

mengxiang2003 mengxiang2003 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我想映射一个大小900多M的文件,CreateFileMapping能够返回有效句柄,但MapViewOfFile却失败返回0,错误代码是8,存储空间不足 无法处理此命令。但是我用GlobalMemoryStatus查看了一下,可用地址空间还有接近2G呢。也就是说地址空间是足够的。请问还有别的原因能够导致失败吗?下面是我的代码

hFile=CreateFile(pcszDicName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hFile == INVALID_HANDLE_VALUE) exit(0);
hFilemap = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,"TTS");



MEMORYSTATUS ms = {sizeof(ms)};
GlobalMemoryStatus(&ms);
DWORD availVirtual = ms.dwAvailVirtual;
FILE* flog = fopen("d:\\log","a");
fprintf(flog," availVirtual:%d\n",availVirtual);
fclose(flog);

void* pVoid=MapViewOfFile(hFilemap,FILE_MAP_READ,0,0,0);
dwe = GetLastError();
if(pVoid == NULL)
{
MEMORYSTATUS ms = {sizeof(ms)};
GlobalMemoryStatus(&ms);
DWORD availVirtual = ms.dwAvailVirtual;
FILE* flog = fopen("d:\\log","a");
fprintf(flog,"hFilemap = CreateFileMapping failed\n");
fprintf(flog,"error:%d",dwe);fprintf(flog," availVirtual:%d\n",availVirtual);
fclose(flog);
printf("mapping failed£¬lack of memory");
exit(0);
}

这是log文件信息:
availVirtual:2068520960
hFilemap = CreateFileMapping failed
error:8 availVirtual:2068520960
...全文
评论 8
收藏 已收藏
分享
返回顶部
mengxiang2003
VC/MFC 16,550 成员 421,606 内容