c++ - 创建文件映射错误代码 8

标签 c++ winapi memory 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"));

我该如何解决这个“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/

相关文章:

c++ - 模板 - 以列出的参数为条件

c++ - 将整数分配给变体

user-interface - Win32 GUI 在调整大小时闪烁

c - 如何获得结构体中正确的偏移地址

C++ 在二维数组的每一行和每一列中查找最小值和最大值

javascript - 将 Javascript 正则表达式模式转换为 C++ std::regex 的规则?

c++ - 从 `cmd` 文件启动的进程创建进程

c++ - 为什么这两个整数变量和两个 double 变量(看似)在内存中共享相同的地址?

django - 如何在 Django WSGI 应用程序中强制限制内存?

c++ - 使用 stringstream 从 TCP 套接字读取