Search code examples
c++winapimemoryfile-mapping

CreateFileMapping error code 8


CreateFileMapping error code 8.Not enough storage is available to process this command. Im trying to create file mapping with 4 Gb (0xFFFFFFFF) on 64bit Win10 visual c++.

#define UBS_MEM_SIZE 0xffffffff

HANDLE hMapObject = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr,           
PAGE_READWRITE, HIWORD(UBS_MEM_SIZE), LOWORD(UBS_MEM_SIZE),     
TEXT("dllmemfilemap"));

How can i solve this "ERROR 8" problem?


Solution

  •    CreateFileMapping(..., HIWORD(UBS_MEM_SIZE), LOWORD(UBS_MEM_SIZE), ...)
    

    The LO/HIWORD macros generate a WORD, a 16-bit value. You are asking for a 0xffff0000ffff memory-mapped file. That's 282 terabytes. Current x64 processors are limited to a 48-bit VM-address, most top out at 8 terabytes. So yes, error 8 (ERROR_NOT_ENOUGH_MEMORY) is entirely expected.

    Don't use those macros. You can use LARGE_INTEGER as an alternative:

    LARGE_INTEGER size;
    size.QuadPart = UBS_MEM_SIZE;
    HANDLE hMapObject = CreateFileMapping(..., size.HighPart, size.LowPart, ...);