Get Paid to Surf the Web

FootsloG Articles
DOS Out-of-Memory

Articles & Help Docs

Footslog Home
Articles Home
Windows 9x & NT
Windows 3.x

Join our Mailing List for News and Tips



Out-of-Memory Problems for DOS

How much memory does your DOS program require? If the System Requirements listing for your program say 640K memory or 4MB RAM, then you don't know; these numbers simply tell you what the total system memory should be, not the amount of available memory. Some examples of good memory requirements are 586K conventional memory and 2560K extended memory.

First of all, it would help to know that PC-compatible computers use several different kinds of memory. DOS programs mostly stick with conventional memory, because that has been around since the 8086 and is still used for backwards compatibility. Conventional memory has a limit of 640K in all Intel x86 processors, including the Pentium, and there is absolutely no way to increase that space. The other two types of memory are easily confused: expanded and extended. Expanded memory was just a hack used on the 80286; it's no longer real, but can be faked using extended memory. Extended memory is all the rest of the memory on your computer except for the first 1MB.

So, you need to know how much conventional memory your program needs, how much extended memory, and whether it uses expanded memory. Once you find those number, then you need to know what your computer has available. At the DOS prompt, type MEM. This will give you a display similar to:


Memory Type        Total       Used       Free
----------------  --------   --------   --------
Conventional          640K        64K       577K
Upper                  75K        75K         0K
Reserved              384K       384K         0K
Extended (XMS)      2,997K       249K     2,748K
----------------  --------   --------   --------
Total memory        4,096K       772K     3,325K

Total under 1 MB      715K       138K       577K

Total Expanded (EMS)                    3M (3,522,560 bytes)
Free Expanded (EMS)                     3M (3,522,560 bytes)

Largest executable program size       576K (590,320 bytes)
Largest free upper memory block         0K       (0 bytes)
MS-DOS is resident in the high memory area.

This example shows that my computer has 577K conventional memory free for DOS programs, and 2,748K extended memory free. It also shows that my computer is pretending it has expanded memory.

What can you do if the total memory is ok, but you don't have enough memory available? The most common procedure is to stop loading programs into memory. Try typing MEM /C /P from the DOS prompt; this will list the programs that are in conventional memory as well as how much memory each one is using. Notice also that there is yet another type of memory: upper. This is the memory area normally reserved for hardware, but not all of it will be in use, so the computer can make use of the 'holes'. In the above example, I had no upper memory available, but if you do, you can move whatever programs are small enough to fit there by changing the keyword DEVICE to DEVICEHIGH if the program is loading in the CONFIG.SYS file, or by adding LH in front of the command if it loads from your AUTOEXEC.BAT file.

Let's say you did that already, and there still isn't enough conventional memory available for your program. What then? Well, you'll have to take a closer look at the CONFIG.SYS and AUTOEXEC.BAT files and decide if you really need all those programs. The best way to experiment with this, if you have DOS 6.2 or later, is to reboot your computer and press the F8 key right when it says "Starting MS-DOS". The you can pick and choose which programs get started and which ones don't. Here are a few tips:

Do use DOS=HIGH,UMB. This moves 64K of DOS out of conventional memory, and it doesn't use any upper memory either!
Do use DEVICE=C:\DOS\HIMEM.SYS. DOS can't move anything out of conventional memory without it.
Do use EMM386.EXE. This allows you to use the upper memory area. On this same line, you need to add the word RAM if your program requires expanded memory, or NOEMS if your program does not use expanded memory.

If you're short on extended memory, SMARTDRV uses a lot so try disabling it in your AUTOEXEC.BAT file, or using a lower cache size.  If you want to disable a line in you autoexec.bat or config.sys you can type REM at the beginning of the line and the operating system will skip reading that line.


Home ] Up ]

Copyright 1999 by All rights reserved.   Click Here for our usage terms and conditions disclaimer.
Questions and comments: