This is a guide I've put together for those not yet familiar with the various OS's RAM limitations & pitfalls, focusing on the three biggies (Mac, Windows & Linux - no offense to any of the others!). Feel free to correct me see bottom, but sources must be provided.
Most 32-bit computers can only access a maximum of 4GB of ram, as 4GB is the
maximum value of a 32-bit unsigned integer when expressed in bytes.
Due to the 3-4GB memory problem*, no 32-bit computer can access all of that, and some OS's (including Vista 32-bit) have been artificially hard-limited to restrict access in the 3-4GB area.
Some x86 32-bit computers may be able to access up to 64GB of ram due to the PAE extension. This is however an uncommon situation, at least on windows OS's with consumer-grade motherboards. Winxp SP2/SP3 explicitly removes PAE support, for RAM access at least.
64-bit computers can theoretically access up to 16 exabytes of RAM, but most operating systems have fairly low limits at present (2008).
The amount of RAM that the OS allows a singular program or process to utilise also varies significantly.
* If you are using a 32-bit OS, and have 4GB of RAM, some of the last GB of
RAM (the 3GB-4GB area of memory) will be unusable as the system uses that area
of memory address space to address hardware components.
How much memory you will lose typically depends most on the amount of ram your graphics card has, as this is the most ram-heavy device in a typical consumer machine. For example, if your graphics card has 512MB of ram, you will lose access to at least half of your last 1GB of system ram. Using PAE with your OS will not prevent this. Some modern gamers have video cards with 1GB or 1.5GB of memory - at these sizes you will lose memory in the 2-3GB memory area, as well.
** If you are using a 64-bit OS, have 64-bit drivers, and a 64-bit motherboard and CPU, you may be able to "reclaim" the entire fourth GB of system ram, -if- your motherboard supports memory address space remapping (or "hoisting") in the BIOS, and this has been enabled (in the BIOS). This moves the hardware addressing space to a higher memory area.
|XP 64-bit edition:||64GB **|
|XP x64:||64GB **|
|Vista Starter||1 GB|
|Vista 32-bit:||3.12GB *|
|Vista Home Premium 64-bit:||16GB **|
|Vista (all other) 64-bit:||128GB **|
|7 32-bit:||4GB *|
|7 Home Basic 64-bit:||8GB **|
|7 Home Premium 64-bit:||16GB **|
|7 (all other) 64-bit:||192GB **|
|2000 Advanced:||8 GB with PAE, 4GB without *|
|2000 Datacenter:||32 GB with PAE, 4GB without *|
|2003 Enterprise Edition:||32 GB with PAE, 4GB without *|
|2003 R2 (or SP1) Enterprise Edition:||64 GB with PAE, 4GB without *|
|2003 Datacenter Edition:||64 GB with PAE, 4GB without *|
|2003 Standard Edition:||4 GB *|
|2008 Enterprise or Datacenter Edition:||64 GB with PAE, 4GB without *|
|2008 other editions:||4 GB *|
|2003 SP2 Datacenter Edition:||2 TB **|
|2003 SP2 Enterprise Edition:||2 TB **|
|2003 R2/SP1 Datacenter Edition:||1 TB **|
|2003 R2 Enterprise Edition:||1 TB **|
|2003 SP1 Enterprise Edition:||1 TB **|
|2003 R2 Standard Edition:||32 GB **|
|2003 Standard Edition SP1:||32 GB **|
|2003 Datacenter Edition:||512 GB **|
|2003 Enterprise Edition:||64 GB **|
|2003 Standard Edition:||16 GB **|
|2008 Standard:||32GB **|
|2008 (all others):||2TB **|
|Windows Web Server 2008:||32GB **|
|Windows Server 2008 R2 Foundation||8GB **|
|Windows Server 2008 R2 Standard||32GB **|
|Windows Server 2008 R2 (all others)||2TB **|
|Windows HPC Server 2008 R2||128GB **|
|Windows Web Server 2008 R2||32GB **|
As this microsoft
article explains, with SP1 some components of Vista will report the full
amount of ram in the system if the amount is 4GB.
However, it's not correct to think that all of that ram is actually available for use.
From the same article:
"However, to avoid potential driver compatibility issues, the 32-bit versions of Windows Vista limit the total available memory to 3.12 GB."
As it says further down the page, to access all 4gb of ram:
"An x64 (64-bit) version of Windows Vista must be used."
By default in XP and Vista, each application is restricted to using 2GB of memory. For an application to utilise more than that, it must itself be large-address-aware, and the OS must have certain switches enabled.
For a large-address-aware application to gain access to more than 2GB of ram
under Winxp 32-bit, you will need to have more than 2GB of RAM free, and also
enable the /3GB switch in the boot.ini.
To learn how to do this, read the following link:
NOTE: Do NOT do this if uncertain. If you screw up the boot.ini your OS will NOT boot. Do NOT copy-and-paste from a website. Websites may contain Unicode characters which notepad will happily insert into the boot.ini without your realising it. Your machine is then FUBAR.
To change application memory allocation for the same results in Vista/Win 7, open a command prompt, type the following: "bcdedit /set IncreaseUserVa 3072" (without quotation marks) and hit enter.
The /3GB switch simply changes the reserved space for the Windows kernel from 3GB to 2GB, leaving additional memory space for applications to use. However it has also been noted to have positive stability/performance impacts on machines with only 2GB of RAM - so it can be worth trying.
Under 64-bit Windows or Windows utilising PAE, where larger memory amounts are possible, the /3GB switch may or may not be useful depending on (a) how much system RAM you have, and (b) how streamlined your windows install is (number of running services, nLite'd versions of windows).
Hardware ram limitations vary between different mac machine types, but 32-bit macs are limited in roughly the same ways as 32-bit intel Windows machines.
32-bit: dependent on machine, maximum 4GB *
64-bit: 4 TB in software, theoretically, though no mac machine exists as yet (2008) which supports this much memory. *
I can't find any information on Mac OS X's application ram limitations. (help?)
Linux of course suffers from the 3-4GB memory area loss in 32-bit versions,
as explained above.
In addition it can currently only access more than 4GB in 64-bit versions via PAE. PAE also works well in 32-bit editions, however finding an appropriate motherboard (32bit for more than 4GB ram) can be tricky.
32-bit: 64GB if PAE is enabled in build, otherwise 4GB *
64-bit: 64GB if PAE is enabled in build, otherwise 4GB *
By default the kernel reserves 1GB for it's own use, though this may be tweakable. Applications, as I understand it, can access all the rest per process.
Back to the index