Memory Issues in Windows

Conclusion for Windows systems: RAM may be addressable up to 4GB as far back as Windows 3.1, but in theory no more than 2GB can be used, and in reality no more than 1.0 or 1.5 GB should be used on Windows 9x. Conclusion for DOS systems: Apparently 4GB can be used. Conclusion: I should get 4GB, for DOS.

Pre-Win95 Limitations

Microsoft Answer ID 116256 says: "Himem.sys does not report or use more than 64 megabytes (MB) of installed memory on computers with an Industry Standard Architecture (ISA) or Micro Channel Architecture (MCA) bus." "Note that although Himem.sys addresses only the first 64 MB of memory, the Windows 95 virtual memory manager (Vmm32.vxd) takes over memory management tasks from Himem.sys. Vmm32.vxd can address more than 64 MB of memory." "This limitation does not apply to computers with an Extended Industry Standard Architecture (EISA) bus. On EISA-based computers, Himem.sys scans each slot for device information, which means that it can report up to 4 gigabytes (GB). " "You may need to use the /EISA switch on the Himem.sys line in your Config.sys file." The information in this article applies to: MS-DOS 4.0, 4.01, 5.0, 5.0a, 6.0, 6.2, 6.21, 6.22, Windows 3.1, 3.11, 95. "Versions of HIMEM.SYS earlier than 3.10 may not recognize more than 64 megabytes (MB) of memory on EISA bus computers." Any earlier verison of "This is because HIMEM.SYS does not recognize EISA memory blocks that start between 64 MB and 65 MB. On these machines, HIMEM.SYS only sees 64 MB of memory." "NOTE: MS-DOS 6.2 and Windows for Workgroups version 3.11 provide HIMEM.SYS version 3.10." As documented in QBASIC.Exe/QHELP, it seems EMM386.EXE is limited to a maximum of 32,768 K of EMS (although " If the value of MIN is greater than the value of MEMORY, EMM386 uses the value specified by MIN." So what happens if you do MIN=65535?) It seems DOS 6.2 increased HIMEM.SYS's maximum limit to 64MB. Wrong! 64MB is MS-DOS 6.x's memory limit. Most newer versions of MS-DOS (e.g. 7.10) will recognize much more memory than 64MB. WFW still relies on DOS as it's a GUI program for DOS. Upgrade your DOS if necessary. If your memory manager is EMM386, I recommend to put the NOEMS NOVCPI parameters on its command line. This will allow you to use UMBs and up to 128MB of physical memory (if you have that much installed). Without these parameters, many versions of EMM386 limit your physical memory to 32MB. DJ (I full-heartedly disagree with disabling EMS.) It seems to be indicated that Windows 98's HIMEM.SYS can support up to 2GB of RAM. (see forum post). However, there are other RAM issues/limitations in the Win9x series.

Windows 3.1: 256MB maximum

Straight from Microsoft "The memory limit for Windows 3.1 has been reported as 512 MB. This limit, while technically correct, does need some qualification. This limit applies only to Windows running in standard mode. The limit for 386 enhanced mode is 256 MB. This number is a sum of both physical and virtual memory. The stated 512 MB limit of standard mode Windows is only theoretically possible and is not practical. In practice, the limit on standard mode Windows is the same as the 386 enhanced mode limit of 256 MB. This information does not apply to computers using a 80286 processor. This processor is physically limited to accessing only 16 MB." Note that this is only the maximum amount of memory. Windows can actually address memory at higher addresses (by not using memory at lower addresses), but it cannot actually use more than that amount of memory. "This means that for Windows 3.1 running in standard mode, the limit for the maximum usable physical memory address is 4096 MB; the limit for 386 enhanced mode is 2044 MB." This information "applies to: Microsoft Windows 3.1 Microsoft Windows 3.11"

Win9x (95/98/98SE/Me) systems with MORE than 512MB

Details at Microsoft Knowledge Base Article 253912. On computers with large amounts of RAM, the maximum cache size can be large enough that Vcache consumes all of the addresses in the system arena, leaving no virtual memory addresses available for other functions such as opening an MS-DOS prompt (creating a new virtual machine). To prevent this: Set the MaxFileCache to 524,288KB (MaxFileCache=524288), or 70% of the physical memory (whichever is less). (Note: the 70% guideline wasn't found on Microsoft's site, but has been reported on multiple 3rd party sites, possibly some just copying the information from others.) Alternatively, although this is a worse idea, you can limit Windows (rather than just the Windows 32-bit protected-mode cache driver (Vcache)) to 512MB by using MaxPhysPage, although I don't see why that would be better. This line (which you'll likely need to add it) should be found in the [VCache] section (which you'll also likely need to add) of the SYSTEM.INI file. Is this a bug that Microsoft should have avoided? Doubt it. VCache does have an internal limit of 800MB. The problem is, there is something called the "system arena" which can get filled up, especially if a system has an AGP aperture which can use 128 or 256MB, something that I don't think was predictable as a likely scenerio when VCache was programmed (before AGP was released).

Win95/98 with 1.0 GB or MORE

If you have more than 1.0 GB in Win95/98 (Maybe this applies to WinMe too, but MS doesn't document the fix for WinMe): Microsoft Knowledge Base Article 184447 says:


If your computer has 1 gigabyte (GB) or more of random-access memory (RAM) installed, Windows may not start. Also, when you try to start your computer, you may receive the following error message:

Insufficient memory to initialize Windows.

Quit one or more memory-resident programs or remove unnecessary utilities from your CONFIG.SYS and AUTOEXEC.BAT files, and restart your computer.

This behavior may also occur during Windows Setup, or when you try to start Windows for the first time.


To work around this issue, add the following line to the [386enh] section of the System.ini file:

This limits the amount of physical RAM that Windows can access to 768 MB. (Hmm, better idea would probably be to look at Q181862 and set MaxPhysPage to 3C000 for 960MB of RAM (1,006,632,960 bytes).)

Win98(SE)/Me systems with MORE than 1.5 GB:

Microsoft Knowledge Base (ID 304943) says: "If your computer has more than 1.5 gigabytes (GB) of memory (RAM), the computer may reboot continuously when you try to start Windows Millennium Edition (Me) or Windows 98" (or 98 SE). Additionally, setup may hang. Solution: To work around this issue, add the following line to the [386enh] section of the System.ini file: MaxPhysPage=40000 This limits the amount of physical RAM that Windows can access to 1 GB. A concern I have: AXCEL216's WinDOwS Tricks - Part 8 "Most 80386, 80486 and all Pentium class (and above) CPUs make use of RAM in 4 KB (4096 Bytes) pages. Newer Pentium II/III/IV and AMD K6/K6-2/K7/K8 CPUs use 4 MB (4096 KB) pages. That's exactly what "MaxPhysPage" does: limits the number of RAM pages available to Windows. This way you can tell EXACTLY how much RAM Windows accesses, and if THAT particular memory is defective." says "There is no known instance of a computer successfully running Windows 95/98/Me with more than 1.5 gb of RAM, although a number of people have been able to do so with exactly 1.5 gb and many more have done so with 1 gb." Apparently 1.5GB haunts more than Windows. has news dated April 22, 2004 which refers to "the recent freedos-devel discussion on XMSDSK with >1.5G machines."

If you have more than 2GB of RAM

Microsoft Knowledge Base Article - 181594 says: "If you install more than two gigabytes (GB) of memory (RAM) in your computer, you may be able to use only two GB of RAM in Windows 95." "Although Windows 95 has the ability to address up to four GB of virtual memory, it can access and use only two GB or less of physical RAM." says that applies to Win 98 and Win Me as well. It's doubtful that any of these Windows could use more than 2GB if they are relying on HIMEM.SYS, and if HIMEM.SYS (at least in some Operating Systems, including Win98) is limited to 2GB which I believe is the case from various pieces I've read.

850 MhZ + breaks Win Me

Wayback Machine archive of KB278844: “850 MHz or Faster Windows Me Computer May Hang During Boot” (from before Microsoft removed the KB article) documents a problem: “Windows attempts to estimate the computer's speed by reading the keyboard repeatedly for 55 milliseconds. However, the number of iterations may exceed 65,535 on computers with a very fast read character BIOS function and overflow the variable that holds the count.” It refers to a fix which is a Winboot.sys that is dated 11/06/2000 07:56p and is 110,080 bytes. However, Winboot.sys is equivilent to IO.SYS. It is perfectly proper to simply think of Winboot.sys as being an IO.SYS file that just has a different name. A later version of IO.SYS has been released with KB311571. Hopefully that includes the code from KB278844 that casues a problem.


Here are some other notes I've made.

4GB max?;en-us;q116256">;en-us;q116256 1MB is the maximum RAM the 8088 address bus can see. By contrast, the new Pentium 4 CPU has a 36-bit address bus (236 = 68,719,476,736, or 64GB) and has a 64GB RAM limit_in theory! Let's look at the study model, an 8086 CPU. The 8086 has a 20-bit address bus and, therefore, can handle up to 1MB of RAM. 2GB limit."> (maybe was supposed to link to the next line for WinMe data?)