Take the 2-minute tour ×

This question is inspired from a question in stackoverflow here

To what I know,

for 32bit machines, we can have 2^32 combination set of instructions.

so for a max capacity of a RAM in 32-bit machine, it should be able to accommodate 2^32 instructions set, which is

2^32 = 4294967296 instructions set

so as 32 bits = 4 bytes, the RAM capacity should be 4294967296 * 4 bytes = 17179869186 bytes

which is same as -->

17179869186/1024 = 16777216 kB

16777216/1024 = 16384 MB

16384/1024 = 16GB

so I guess the max capacity of RAM that a 32-bit machine can hold is 16GB.

But sounds like 4GB is the correct answer. What's wrong with me???

share|improve this question

closed as not a real question by Ƭᴇcʜιᴇ007, afrazier, Nifle, studiohack Aug 2 '11 at 11:32


You're confusing "instruction sets" with "memory addressing" to say the least. :) –  Ƭᴇcʜιᴇ007 Aug 1 '11 at 16:16
appreciate if you can help correct me –  Kit Ho Aug 1 '11 at 16:17
@Kit, you basic confusion is that the size of a pointer is not the same as the size of the thing pointed to. A pointer on a 32-bit machine is 4 bytes wide, but a single memory address (the thing that the pointer points to) is only one byte wide. –  JSBձոգչ Aug 1 '11 at 17:47
The confusion here is between the size of the processor word (32 bits in this case) and the size of the addressable memory unit (in the case of current general purpose machines that is 1 byte = 8 bits). So yes, the processor can load four addressable memory units at a time. –  dmckee Aug 1 '11 at 18:48
I also don't understand the close votes here - this seems like a real question to me (but then, that's why I answered it). –  Shinrai Aug 2 '11 at 14:41

1 Answer 1

up vote 18 down vote accepted

RAM is addressed by the byte. There are 2^32 addresses possible in this situation, so a maximum of 4294967296 bytes (2^32) can be addressed. That means the effective maximum on addressible memory is 4294967296 bytes, which is 4 gigabytes.

share|improve this answer
I'm not sure what you mean, but it's very straightforward. A 32-bit processor can natively address 2^32 bytes. 2^32 bytes = 4GB. That's all there is to it - I'm not sure where you're getting this "address=4 bytes" thing from. I have edited my answer to perhaps be a bit more explicit. –  Shinrai Aug 1 '11 at 16:32
@Kit each memory address isn't 4 bytes - each is 1 byte. A 4 byte long variable (for example) will cross over 4 memory locations. So your multiplication by 4 is irrelevant. –  DMA57361 Aug 1 '11 at 16:38
Just to expand this explanation, there is no law of nature that says that the size of whatever an address points to has to be one byte (8 bits). If you have a memory architecture where each memory cell is 8 bytes (64 bits) instead, you could address 2^32*8 bytes with a 32 bit address. But normally you address memory as bytes, even to this day. –  Martin Vilcans Aug 1 '11 at 21:09
The reason for addressing bytes is that many data formats are sequences of bytes, most notably text. –  starblue Aug 1 '11 at 21:12
Commenters are making good point, especially regarding the reasons the addressing is like this (and the fact that there's no reason it couldn't be otherwise, but then there's not really even a law of nature that says we have to use powers of two or 8-bit bytes or what have you) –  Shinrai Aug 1 '11 at 22:00
