我想映射一个大小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