What determines the maximum RAM capacity a processor can handle?

443 views

What determines the maximum RAM capacity a processor can handle?

In: 8

6 Answers

Anonymous 0 Comments

There is a good article on Wikipedia with the details, but at its simplest, a 32-bit processor can’t make use of memory addresses longer than 32-bits

Assuming that memory is addressed on a per byte basis that gives a limit of 4GB (2^32 Bytes)

https://en.m.wikipedia.org/wiki/RAM_limit

You could access more memory without using longer address, by increasing the size of a block from 1 byte to 2 or more, but there are many instances where that becomes troublesome, and you’d need a more complex processor of you want to be able to do byte level operations, when memory is read and written in 2byte or 4byte blocks

Anonymous 0 Comments

In modern processors how many lanes the processor has allocated towards memory channels is a chief deciding factor, as well as the available density of memory modules-assuming socketed memory. 2 or 4 channels are common on consumer processors, 6 or 8 on server/workstation class processors.
Now you can have dual channel memory but 4 physical slots to use, performance can reduce somewhat as 2 slots will share bandwidth but this is typically compensated by the larger allowable memory.

In terms of physical computers some will be limited by how much power than can deliver to the memory, ie a small system may not be able to power high density memory sticks-think 1L micro systems.

Anonymous 0 Comments

It’s a limitation of the CPU or system itself. Most 8-bit CPUs could only access 64k of memory at one time. The Atari 2600 though could access only 8k.

There were clever tricks you could use (bankswitching) that let you have more than 64, but you couldn’t access it all at once.

eg you have memory ABCD. then you could replace D with E, F, or G but D wouldn’t be accessible anymore

16 and 32-bit systems had something similar, starting on 32-bit Pentium CPUs it was called PAE (physical address extension) where you could access 36-bits of memory, but again not all at once.

Even on x86_64, the instruction set will let you physically access 64-bits. But most CPU limits virtual memory (currently) to 48 bits.

Anonymous 0 Comments

RAM is useless if you can’t find where you just stored something. So each spot in RAM is numbered. Numbers can go on forever, but the amount of space in the processor cannot. It can only handle a certain amount of digits. If the processor can only handle 5 digits, there’s no point in numbering anything past 99,999.

Anonymous 0 Comments

Theorectically the maximum amount of RAM a CPU can address is based on the addressing bits it has.

RAM is like post office boxes in that you can store stuff in them, but you need to have an address on each one to identify what’s stored where. The more bits of addressing space the processor can handle, the more RAM it can theoretically address.

An 8 bit processor could address 64 kilobytes

A 16 bit processor could address 16 megabytes

A 32 bit process can address 4 gigbaytes

While a modern 64 bit processor is limited to 16 exabytes or 16 million terabytes (TB)

But this is only partially true as hardware people came up with various workarounds to extend this. Later generation 32-bit Intel Processors like the Pentium Pro supported PAE (Physical Address Extensions) which allow it to address up to 8gb of RAM but with a cost of efficiency.

There’s also hard limitations on the motherboard and CPU as well.

Today the amount of RAM a CPU + mobo will support is down to how many RAM slots, data lanes, and the density of the RAM modules themselves. So a lot of modern Motherboard + CPU combinations will only be able to support around 32gb or 64gb. While Server motherboards and CPU can address upwards and over a Terabyte of RAM these days.

Anonymous 0 Comments

You can design a processor to handle any amount of ram you want. It’s down to the communication between the memory controller and the processor. It’s easier if you stick to sizes smaller than the word width i.e. 2^32 bytes for 32 bits, 2^64 for 64 bits. Going beyond that requires much more support from the operating system translating addresses from a smaller address space to the larger address space. Or you have to write software aware that it’s running in a computer with an extra wide address space i.e. embedded programs that are their own OS maybe by linking to a library based OS. That trick is called an exokernel but they have always been extremely niche things.