Search code examples
c++cwindowsmemory32bit-64bit

Increasing (nonstack) memory used by a C/C++ program


I am running a heavy memory intensive job on a windows OS with 12 GB of RAM. By my computations, 4 GB of memory should be enough to run the program. I am running the program I've written with dynamic memory allocation (I have 2 versions of the program in C and C++ with malloc/free and new/delete respectively) using CodeBlocks.

When I pull up task manager, I see that the program only seems to use about 2 GB of RAM, even when I have a lot more available, and the pagefile size is currently set to 30 GB. Is there any way I can get CodeBlocks to use more memory? I also used DEV-C++ and I get the same bad_alloc error in the C++ code.

Any ideas? Thanks in advance. Oh and I am using a 64-bit Windows 7.


Solution

  • Look at this page for memory limits based on architecture (x86, 64-bit) and Windows version. Some work-arounds are mentioned:
    https://learn.microsoft.com/en-us/windows/win32/memory/memory-limits-for-windows-releases#memory_limits

    First you have to make sure you are building a 64-bit executable and not 32-bit.
    If using g++, make sure you use option -m64.


    As for large address awareness mentioned in the MSDN page, it should be active by default on 64-bit Windows systems. Still, the Visual C++ linker has an option to explicitly ask for it: /LARGEADDRESSAWARE

    Now if you don't use the Visual C++ linker, it appears you can always use this as an extra step if you want to activate large address awareness for your executable:

    editbin /LARGEADDRESSAWARE your_executable
    

    (editbin being an M$ Visual Studio tool)