A 32 bit system can address a maximum of 4 gigabytes of memory. This is the reason a FAT 32 file system can't support a file larger than 4 GB in size. This is the reason Windows Server 2003 Standard Edition 32-bit will only recognize a maximum of 4GB of RAM no matter how much is really installed. 4GB is the max.
4GB can be represented by each of these examples:
Hex · FFFFFFFF
Dec · 4294967295
Oct · 37777777777
Bin · 11111111111111111111111111111111
Interestingly enough, three of these examples illustrate how the number really is the maximum at this point. One more and they roll right over into another "tens place" so to speak. Decimal (base 10) is the only one that seems like adding one more wouldn't really make all that much difference at all (95 .. 96 .. so what).
For those interested in IP addressing, notice how easily the 32-bit address can be broken into four separate groups of octets (8 bits each).
Hex · FF.FF.FF.FF
Bin · 11111111.11111111.11111111.11111111
Since FF = 255, it's easy to see where 255.255.255.255 comes from. Binary makes it more apparent when it comes to routing and subnet masking, but the numbers work just the same!
With these limits in mind, it's easy to see how a 64-bit operating system wouldn't have the same limitations (ceiling) when it comes to addressing memory. In fact, the ceiling for Windows Server 2003 Standard 64-bit is 2 terabytes !
Windows Server 2003 Enterprise Edition 32-bit can support up to 64GB of RAM, but accomplishes this by running in a special compatibility mode. This may be helpful if your software has not been made compatible with 64-bit Windows (most have not). Another concern for 64-bit Windows has been hardware and driver incompatibilities. Most of the major manufacturers have already gotten up to speed, but there are many custom vendors that just haven't made it that far with their products.
Terminal Server throws another kink in the mix. Server memory is divided evenly between kernel and application usage. This means that if you have 4GB RAM, only 2GB can be available for your application. It also means that all your RDP users get to share 2GB of RAM with the system. Once either 2GB portion is used up, your server becomes maxed out.
There are special switches that can be used to modify how much RAM is allocated to the kernel, but these come with a performance loss and increase CPU load. These switches should never be used with Terminal Server since it normally pushes the limit on memory utilization.
Here are a few links to good info I ran across while researching this topic:
( )