Why do 32bit computers only support 4gb of ram? I know everybody says it's because 2^32 is 4294967296, or 4GB. But by that logic, 16 bit computers should only support 64KB of ram. I thought that was supposed to be the limit of 8bit computers? Which by the same logic, would only be able to access 256 bytes of ram. Also, shouldn't that 4294967296 bytes be multiplied by the number of bytes wide the ram bus is? This would give a 32bit computer access to 17179869184 bytes of ram.

@OpenComputeDesign @Huggles It has to do with the width of the address bus, not the data bus. Many classic 8-bit computers have a 16-bit address bus (so 64k limit). 8088 processor (16 bit) had a 20-bit address bus (1M). 80486 (32 bit) had a 32-bit address bus. See also: banking, paging, virtual memory, segmentation.

@OpenComputeDesign @Huggles Your second question is true for some architectures which are word-addressable rather than byte-addressable. x86 is just not one of them. Word-addressable architectures are attractive until you start having to work with strings of bytes. Example: DEC Alpha.

@futzle @Huggles Wait, so does that mean that current 64 bit processors only retrieve 8 bits per cycle from RAM?

@futzle @Huggles If that were true, wouldn't it take 8 cycles to retrieve an address stored in RAM?

@OpenComputeDesign @Huggles Typically no. Most architectures have a “load word” instruction which loads n sequential bytes into a register. For a 64-bit data bus you’d load 8 bytes at a time. If you’re clever you can write byte-oriented algorithms using shifts and masks on 8 bytes at a time.

Also caches complicate the picture. If you load a byte from RAM then the adjacent bytes were probably also loaded into the cache, so it’s quickish to load a word one byte at a time.

@OpenComputeDesign It's because 32-bit x86 supports byte addressing and the widest addressing mode permits 32-bit addresses; so 1 byte * 2**32. It's called 32-bit because the widest CPU register is 32 bits.
Basically all 8-bit computers supported using a special CPU register for the upper half of an address or using a pair of registers for an address; also notable are addressing modes with 16-bit constants on e.g. the C64 and the NES.
Computers limited to 8-bit addresses did exist...

Sign in to participate in the conversation

Linux Geeks doing what Linux Geeks do..