The cause is due to the memory addresses available. 32 bit windows can only handle up to 4GB worth of memory addresses. Of these anywhere from about .5 to .75GB worth of the topmost addresses are already reserved by various parts of the system hardware.
Depending on the specifications of each system, these addresses are reserved and so cannot be used by the Operating System.
The reason it's not the same for all systems is that it depends on the exact nature of the hardware in each system.