Changing Cygwin's Maximum Memory
Prev | Chapter 2. Setting Up Cygwin | Next

## Changing Cygwin's Maximum Memory

Cygwin's heap is extensible. However, it does start out at a fixed size and attempts to extend it may run into memory which has been previously allocated by Windows. In some cases, this problem can be solved by adding an entry in the either the `HKEY_LOCAL_MACHINE` (to change the limit for all users) or `HKEY_CURRENT_USER` (for just the current user) section of the registry.

Add the `DWORD` value `heap_chunk_in_mb` and set it to the desired memory limit in decimal MB. It is preferred to do this in Cygwin using the regtool program included in the Cygwin package. (For more information about regtool or the other Cygwin utilities, see the section called “Cygwin Utilities” or use each the `--help` option of each util.) You should always be careful when using regtool since damaging your system registry can result in an unusable system. This example sets memory limit to 1024 MB:

    regtool -i set /HKLM/Software/Cygwin/heap_chunk_in_mb 1024
    regtool -v list /HKLM/Software/Cygwin

Exit all running Cygwin processes and restart them. Memory can be allocated up to the size of the system swap space minus any the size of any running processes. The system swap should be at least as large as the physically installed RAM and can be modified under the System category of the Control Panel.

Here is a small program written by DJ Delorie that tests the memory allocation limit on your system:

    main()
    {
      unsigned int bit=0x40000000, sum=0;
      char *x;

      while (bit > 4096)
      {
        x = malloc(bit);
        if (x)
        sum += bit;
        bit >>= 1;
      }
      printf("%08x bytes (%.1fMb)\n", sum, sum/1024.0/1024.0);
      return 0;
    }

You can compile this program using:

    gcc max_memory.c -o max_memory.exe

Run the program and it will output the maximum amount of allocatable memory.

Prev | Up | Next
Environment Variables | Home | Using Windows security in Cygwin