Memory Use Limitations in Microsoft Windows (84778)
The information in this article applies to:
- Microsoft Windows Software Development Kit (SDK) 3.0
- Microsoft Windows Software Development Kit (SDK) 3.1
This article was previously published under Q84778 SUMMARY
Windows 3.0 can access up to 16 megabytes (MB) of physical memory.
With the release of version 3.1, Windows can access more than 16 MB of
physical memory. This article discusses the factors that influence the
amount of memory available to applications in the Windows environment.
MORE INFORMATION
In enhanced mode, Windows versions 3.0 and 3.1 can use features of the
Intel 386 (and compatible) microprocessors to supplement the installed
physical RAM memory with virtual memory in a disk-based swap file. As
physical memory fills, Windows sends the least-recently used pages of
memory to disk. When this data is later accessed, Windows pages it
back in from disk. This activity is transparent to applications in the
system.
Windows 3.0 cannot address any memory with an address higher than
100000h (16 MB). Windows 3.1 can address at most 256 MB of physical
RAM memory, and the largest swap file Windows 3.1 will ever create is
256 MB. To be used by Windows 3.1, all physical RAM memory must
have an address lower than 7FC00000h (2,044 MB).
While the combination of 256 MB of physical RAM memory coupled with a
256 MB swap file provides a theoretical limit of 512 MB, the actual
maximum is somewhat less than 512 MB.
The architecture of the Intel 386 processor defines a Local Descriptor
Table (LDT), which is used in the memory protection scheme. Windows
3.1 uses one LDT that provides 8192 descriptors. Each descriptor can
describe a block of memory containing at most 64 KB. While multiplying
the number of descriptors by the maximum amount of memory yields the
512 MB theoretical limit again, Windows will not access this much
memory for the following two reasons:
- Windows reserves some descriptors for its own use.
- Most memory allocations that use a descriptor do not allocate the
64K maximum allowed.
Both of these factors reduce the number of available descriptors and
the amount of memory that Windows can use.
While the About dialog box in the Program Manager reports an estimate
of the amount of memory available, Windows does not maintain
sufficient information to accurately report the amount of free memory
at any given time. Maintaining more accurate information regarding the
amount of free memory would seriously degrade system performance
because memory is allocated and freed very frequently.
The values reported by the GetFreeSpace and GlobalCompact functions
are less than or equal to the amount of free memory available in the
system. Because of their imprecise nature, an application should use
the value reported by one of these functions only for an informational
display. The application must not assume that it is possible to
allocate that much memory.
The largest block of memory that an application can allocate is
affected by the degree of memory fragmentation. Memory available in
fixed portions of memory may be available for allocation only as a
fixed block. For example, consider the case where the GetFreeSpace
function returns 100K available, and 64K of the available space is
located in the fixed portion of the heap with the remainder in the
movable and discardable portion of the heap. An attempt to allocate a
100K block of movable and discardable memory will most likely fail.
Modification Type: | Major | Last Reviewed: | 10/29/2003 |
---|
Keywords: | kb16bitonly KB84778 |
---|
|