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/

10-11 16:56