Forum Discussion

laxagy's avatar
laxagy
Copper Contributor
Aug 04, 2020
Solved

Anyone single 64-bit process only can be allocated 4GB memory in my WIN10.How to make it more?

I think there is a limit for a single process by the WIN10 system. How to cancel the limit or make it higher? PS: the command"bcdedit /set increaseuserva" is not useful.
  • This is not correct and there is no 4GB limit imposed by Windows 10 for any 64-bit process.

     

    The limits are as follows on 64-bit Windows 10:

    32-bit process w/o large address aware: 2GB

    32-bit process with large address aware: 4GB

    64-bit process w/o large address aware: 2GB

    64-bit process with large address aware: 128TB

     

    The large address aware flag ist a flag set by the linker when linking the compiled program. Normally every 64-bit executable should have it set. If not, you get a maximum of 2GB even for 64-bit processes.

    If you want to test how much memory your system can allocate for a single 64-bit process, download testlimit64.exe from Microsoft Sysinternals and use the following command lines:

     

    testlimit64.exe -m 1024

    testlimit64.exe -d 1024

     

    The first command will only allocate the virtual memory addresses and does not touch them, the second one also touches the memory. So the first one shows you what is possible with your system resources, the second one goes up to the limit your RAM and pagefile can handle.

    laxagy 

3 Replies

  • dretzer's avatar
    dretzer
    Iron Contributor

    This is not correct and there is no 4GB limit imposed by Windows 10 for any 64-bit process.

     

    The limits are as follows on 64-bit Windows 10:

    32-bit process w/o large address aware: 2GB

    32-bit process with large address aware: 4GB

    64-bit process w/o large address aware: 2GB

    64-bit process with large address aware: 128TB

     

    The large address aware flag ist a flag set by the linker when linking the compiled program. Normally every 64-bit executable should have it set. If not, you get a maximum of 2GB even for 64-bit processes.

    If you want to test how much memory your system can allocate for a single 64-bit process, download testlimit64.exe from Microsoft Sysinternals and use the following command lines:

     

    testlimit64.exe -m 1024

    testlimit64.exe -d 1024

     

    The first command will only allocate the virtual memory addresses and does not touch them, the second one also touches the memory. So the first one shows you what is possible with your system resources, the second one goes up to the limit your RAM and pagefile can handle.

    laxagy 

    • DanFrederiksen's avatar
      DanFrederiksen
      Copper Contributor

      I had similar issue exceeding 2GB alloc but setting largeaddressaware didn't help. Turns out that when I calculate the alloc size in the bracket the calculation is done in signed 32bit integer and overruns to a negative value, hence bad alloc. I had to change a lot of indices to 64bit ints to work with bigger arrays, not just the allocation. int is no longer the unlimited iterator :)

      I added this:   using int64 = long long;

      so I can avoid the truly ugly type name mess that is c++. I also defined int8

      This was annoying to figure out, you guys were no help at all :)

    • laxagy's avatar
      laxagy
      Copper Contributor

      Thank you for your reply.

      It shoud be the fault of my memory test tool.

      I confirm the value of one process memory in the task manager of windows. It is definitely more than 4GB.

Resources