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++ - 创建文件映射错误代码 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32692879/