Just reading some notes in a purdue lecture about OSs, and it says:
A program sees memory as an array of bytes that goes from address 0 to 2^32-1 (0
2 ^ 32 = 4 * 1024 * 1024 * 1024
That, in bytes, is the definition of 4 GB. In other words a 32-bit register as a memory pointer can address 4 GB of memory and no more.