Windows 3.11 System Resources in Program Manager

In Microsoft Windows 3.11, the "About Program Manager" dialog famously displayed a "System Resources" metric as a percentage of free capacity. Contrary to common belief at the time, this percentage did not reflect available physical RAM or swap file space. Instead, it represented the remaining capacity of two critical 64-kilobyte memory heaps managed by the core USER and GDI subsystems.

Because Windows 3.11 was built upon a 16-bit architecture, memory segments were fundamentally constrained to 64 KB in size. The operating system handled its interface and rendering using two central dynamic-link libraries: USER.EXE and GDI.EXE. Each maintained its own internal 64 KB local heap:

  • The USER Heap: Stored data structures related to open windows, menus, dialog boxes, and message queues.
  • The GDI (Graphics Device Interface) Heap: Stored graphical objects such as pens, brushes, fonts, device contexts, and bitmap metadata.

To determine the percentage shown in the About box, Program Manager called the Windows API function GetFreeSystemResources. This function, exported by the USER module, accepted parameters to query the free space of specific heaps or the system as a whole:

  • GFSR_SYSTEMRESOURCES (0x0000): Returned the overall system resource percentage.
  • GFSR_GDIRESOURCES (0x0001): Returned the percentage of free space in the GDI heap.
  • GFSR_USERRESOURCES (0x0002): Returned the percentage of free space in the USER heap.

When querying overall resources, GetFreeSystemResources measured the unallocated bytes remaining in both the USER heap and the GDI heap against their respective maximum capacities. It calculated the individual percentage of free memory for each heap and then returned the lower of the two values:

\[\text{System Resources \%} = \min(\text{USER Free \%}, \text{GDI Free \%})\]

Program Manager retrieved this integer value, formatted it into a string (e.g., "System Resources: 78% Free"), and populated a static text control inside the About dialog window.

Because the metric reflected the lower of the two heaps, running out of space in either USER.EXE or GDI.EXE caused the reported system resources to plummet. Even if a machine had tens of megabytes of free RAM, exhausting a single 64 KB heap would cause the display to show critical resource levels, frequently triggering "Out of Memory" errors when launching additional applications.