CreateFileMapping 错误代码 8

Smi*_*ken 1 c++ memory winapi file-mapping

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"));
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个“错误 8”问题?

Han*_*ant 5

   CreateFileMapping(..., HIWORD(UBS_MEM_SIZE), LOWORD(UBS_MEM_SIZE), ...)
Run Code Online (Sandbox Code Playgroud)

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, ...);
Run Code Online (Sandbox Code Playgroud)