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
Because each byte of memory has to have an address. In a 32-bit operating system, an address is 32 bits long; thus, there are 2^32 possible addresses, which means there are 2^32 bytes = 4 GB.