CreateFileMapping错误代码8。没有足够的存储空间来处理此命令。我试图在64位Win10 Visual C++上使用4 Gb(0xFFFFFFFF)创建文件映射。
#define UBS_MEM_SIZE 0xffffffff
HANDLE hMapObject = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr,
PAGE_READWRITE, HIWORD(UBS_MEM_SIZE), LOWORD(UBS_MEM_SIZE),
TEXT("dllmemfilemap"));
我该如何解决“ERROR 8”问题?
最佳答案
CreateFileMapping(..., HIWORD(UBS_MEM_SIZE), LOWORD(UBS_MEM_SIZE), ...)
LO / HIWORD宏生成一个WORD,即16位值。您要一个0xffff0000ffff内存映射的文件。那是282 TB。当前的x64处理器被限制为48位VM地址,最大为8 TB。所以是的,错误8(ERROR_NOT_ENOUGH_MEMORY)完全可以预期。
不要使用这些宏。您可以使用LARGE_INTEGER作为替代:
LARGE_INTEGER size;
size.QuadPart = UBS_MEM_SIZE;
HANDLE hMapObject = CreateFileMapping(..., size.HighPart, size.LowPart, ...);
关于c++ - CreateFileMapping错误代码8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32692879/