Quarterdeck Expanded Memory Manager (abbreviated QEMM, sometimes , though not by those who developed it), is a memory manager produced by Quarterdeck Office Systems in the late 1980s through late 1990s. It was the most popular memory manager for the MS-DOS and other DOS operating systems.
Originally, the product was called QEMM-386, and had a complementary product called QRAM that worked in a similar manner on Intel 80286's that had some specific Chips and Technologies chipsets. The 386 was dropped when the Intel Pentium was released. QEMM-386 and DESQview could cooperate and when shipped as a bundle were called DESQview 386.
QEMM provides access to the Upper Memory Area (UMA), expanded memory (EMS) and extended memory (XMS). DOS programs frequently required a large amount of conventional memory, and QEMM helped to increase the amount of free conventional memory by loading programs into UMBs and the High Memory Area, the first 64K (minus 16 bytes) of physical extended memory. A number of programs, such as Lotus 1-2-3, early versions of Microsoft Windows, and many games also used the EMS and XMS memory.
Microsoft released comparable but simpler memory managers of its own - HIMEM.SYS for XMS and EMM386.EXE for EMS with MS-DOS 4.01 in 1989; earlier Windows/386 2.1 included a built-in EMM which offered EMS to DOS windows during Windows sessions only. These versions could not yet create Upper Memory Blocks. Digital Research's DR-DOS 5.0 (1990) was the first non-vendor-specific DOS to offer the UMB technology, incorporating a 386-mode XMS/EMS manager also called EMM386. MS-DOS finally offered UMBs in 1991 with version 5.0. MS-DOS's EMM386 required HIMEM to be loaded first, while DR-DOS's EMM386 fulfilled both roles and did not need a separate XMS driver, which was still provided but only needed on 80286-based machines (HIDOS.SYS).
Neither DR's nor MS's memory managers were as capable as QEMM - for example, both required Upper Memory Blocks to be manually discovered and included, whereas QEMM could do this quite satisfactorily on its own. QEMM also did not require one to predefine how much memory should become EMS and how much should be XMS, therefore it was not necessary to juggle boot configurations, a facility subsequently incorporated into EMM386 for later versions of MS-DOS. However, although QEMM still usually freed up more conventional memory than EMM386 did, Microsoft finally automated the process of UMB optimisation in DOS 6 with the memmaker utility, and QEMM's market share began to slide.
While popular when DOS programs were the mainstream, QEMM eventually became irrelevant as Windows programs replaced DOS programs. The final version was QEMM 97, which was compatible with Windows 95 and later Windows 98/ME, but by this point, DOS applications were largely obsolete and thus so was DOS memory optimisation.
When Windows 3.0 (or later) started in 386 Enhanced mode, it asked all memory managers (and possibly other TSR programs) to shut down, and took over their role for the duration of the Windows session. Indeed, it is not possible to have multiple protected-mode kernels at once. So QEMM was not actually running together with Windows. As part of the shutdown sequence related to Windows startup, memory managers could however tell Windows to load specific VxD-type device drivers which would take over their original functionality during the Windows session. For example, QEMM was shipped with WINHIRAM.VXD and WINSTLTH.VXD. They would also inform Windows about the specific memory mappings they have established, which Windows would then import (the so-called Global EMM import function).