EMM386.EXE EMS/XMS Memory Pool Sharing (96595)

The information in this article applies to:
    Microsoft MS-DOS operating system 6.0
    Microsoft MS-DOS operating system 6.2
    Microsoft MS-DOS operating system 6.21
    Microsoft MS-DOS operating system 6.22

This article was previously published under Q96595


EMM386.EXE versions 4.45 and 4.48 support a common extended memory specification (XMS) and expanded memory specification (EMS) memory pool.

Prior versions of EMM386.EXE preallocate the extended memory needed to emulate expanded memory. This makes the extended memory unavailable to other XMS-based applications, even when the reserved expanded memory is not in use.


Starting with version 4.45, EMM386.EXE can wait until an application requests expanded memory before allocating extended memory and converting it to expanded memory. When the application frees the expanded memory it was using, EMM386.EXE returns it to the XMS memory pool.

Two EMM386.EXE parameters control XMS/EMS pool sharing. The [MEMORY] parameter specifies the maximum amount of expanded memory that EMM386.EXE can emulate. The MIN= parameter specifies the minimum amount of expanded memory that EMM386.EXE can provide.

There is a one-to-one ratio between expanded and extended memory usage: it requires 1 megabyte (MB) of extended memory to emulate 1 MB of expanded memory.

Guaranteeing You Reserve Enough Expanded Memory

Unless you use the MIN= parameter, there is no guarantee that there will be enough memory for your application.

For example, if you have the following EMM386.EXE configuration, EMM386.EXE is configured to emulate up to 1 MB of expanded memory.
   device=c:\dos\emm386.exe 1024      ([memory] = 1024)
EMM386.EXE allocate 1 MB of extended memory as expanded memory when expanded memory is requested. It may be unable to actually provide a full megabyte of expanded memory if other applications or device drivers have reduced the amount of free extended memory below 1 MB.

To preallocate extended memory as expanded memory and thereby ensure your application has the expanded memory it requires, use the MIN= parameter. For example, to configure EMM386.EXE to emulate up to 1 MB of expanded memory and a minimum of 512 kilobytes (K) of expanded memory, use the following command in your CONFIG.SYS file:
   device=c:\msdos\emm386.exe 1024 min=512
The MIN= parameter ensures that EMM386.EXE is able to provide a certain amount of expanded memory by preallocating extended memory as expanded memory. MIN= defaults to 256K (or zero if the NOEMS switch is used). You can also specify MIN=0 to ensure EMM386.EXE does not preallocate any extended memory.

Modification Type: Major Last Reviewed: 11/21/1999
Keywords: KB96595