If the memory is byte addressable, shouldn't it be

2^64 / (2^10 * 2^10 * 2^10) = 2^34 GB ?

A general Google search says 8GB or 16GB max.

How is that true? Also, how does it depend on the Operating System?

migrated from stackoverflow.com Jul 27 '10 at 2:47

This question came from our site for professional and enthusiast programmers.

  • 8 GB is obviously off the wall as my work machine has 12 GB and can address it all, plus a GB of video RAM, plus all my hardware plus all my virtual memory just fine. – Mark Peters Jul 25 '10 at 6:35
  • Newegg sells a 32GB package of ram, intended for one computer. 32-bit supported 3.2GB, and 128-bit will support millions of terabytes, so I think 64-bit is a lot more than double what 32-bit had. – tkbx Feb 10 '13 at 15:38
up vote 49 down vote accepted

There are multiple interleaving factors.

First of all, you will never, ever be able to assemble a system that has 264 bytes (16 exibytes) of physical RAM.

Second, just because an architecture uses 64-bit pointers, doesn't mean that all the bits of those pointers are actually used. Notably, current x86-64 CPUs (aka AMD64 and Intel's current 64-bit chips) actually use 48-bit address lines (AMD64) and 42-bit address lines (Intel) (see http://en.wikipedia.org/wiki/X86_64#Virtual_address_space_details ), theoretically allowing 256 terabytes of physical RAM.

Second, motherboards have their own limits on how much RAM they can support, both physically and logically. Physically, there are only going to be so many slots available for RAM. As for the "logical" limits, I don't fully understand why this is still the case for x86-64 (the memory controller having long since been migrated into the CPU itself), but there it is. Presumably corners are being cut on address lines to save a few bucks in design and manufacturing.

Third, an operating system may have internal limitations as to how much RAM it can efficiently support. In part, this is actually to prevent needing overly large data structures to keep track of usage for memory that isn't really there. Last I checked, Linux allows 128TB of virtual address space per process on x86-64, and can theoretically support 64TB of physical RAM.

Fourth, some operating systems (e.g. Windows) will artificially limit how much RAM can be used as a tactic to make users upgrade to more expensive versions if they want more RAM (Windows 7 Starter is limited to 2GB, Home Basic to 8, Home Premium to 16, and Professional and above are 192GB, and Windows Server releases have far higher limits).

  • 1
    +1 for mentioning physical address lines being typically << number of bits in an address register on 64-bit architectures – Paul R Jul 25 '10 at 8:39
  • 3
    A source for the 42-bit address lines (added by anonymous edit) would be appreciated. Until then, I personally don't consider that information trustworthy. – Bob Jun 4 '12 at 17:06
  • 19
    Never say never. Moore's Law is still in effect, the last I heard, so systems with 16 exabytes of RAM may well appear within our lifetimes. Then we'll all have to move to 128-bit operating systems... – Michael Hampton Jul 24 '12 at 0:42
  • Physical addresses are also limited by the number of bits provided for physical addresses in the TLBs (and by the size of cache tags given physical address tagging) and by the bits available for physical addresses in the page table entries (if such are defined by the architecture as in x86-64 which supports 52-bit physical address space with 4KiB pages). The latter is a firmer (architectural not implementation-based) limit, though even architectures can be changed. – Paul A. Clayton Oct 24 '13 at 19:02
  • 2
    @MichaelHampton - NecroReply, but couldn't resist :) Doubling every 2 years (which is faster than recent trends) would still take 60 years to get from 16GB to 16EB. By then I doubt "laws" about silicon transistors will have any relevance ;) – MatBailie Apr 20 '16 at 14:05

If you use MS Windows, the maximum memory is constrained by the operating system.

For Windows 7, the maximums are:

  • Starter: 2GB
  • Home Basic: 8GB
  • Home Premium: 16GB
  • Professional: 192GB
  • Enterprise: 192GB
  • Ultimate: 192GB

Windows Server 2008 ranges from 8GB for entry level to 2TB for the top of the line.

See http://msdn.microsoft.com/en-us/library/aa366778%28VS.85%29.aspx for a full-ish list.

These limits are primarily for marketing reasons. By restricting the cheaper versions they make the high-end versions (comparatively) more attractive.

I think that recent Linux builds work with around 32TB of RAM, although not all hardware can support that.

  • 2
    Those are not really technical limits. Those are artificial limits introduced for business reasons. – kasperd Jun 7 '17 at 20:13

A 64-bit machine should be able to address up to 264 addressable units (in architectures designed over the last few decades, addressable units are invariably bytes, a.k.a. octets). If you define a "gigabyte" as 230 addressable units, then yes, 234 gigabytes would be another way to express the same count.

What Google search produced those ridiculous tiny results? Maybe the page you found was talking about the amounts of RAM you can buy in reasonably cheap boxes of a certain model -- you can most definitely have much more RAM (all addressable, of course) even in boxes that are far from being very costly.

Operating systems most definitely can and do restrict the amount of addressable memory (for example, they can do so by limiting the size of page tables, perhaps to some configurable maximum that can be set by recompiling or otherwise reconfiguring the OS -- it's hard to be more specific without focusing on some specific group of OSs).

  • Why is 2^30 addressable units 1 GB? Each address unit stores 1 bit, so, 2^30 address units store that many bits which amount to 0.134217728 gigabytes. What am I missing? – Darshan Chaudhary Sep 7 '16 at 6:05
  • 1
    @DarshanChaudhary 2^30 is the number of distinct addresses. Each address identifies one byte of memory, not one bit. – David Moles Nov 17 '16 at 20:07

You can have as much RAM as you'd like but it all depends on the operating system and the application you're running - as someone else stated.

If you're running an hungry CPU intensive application that's also intensive on other hardware like your hard disk then you best seriously consider a second CPU, in a completely separate machine. For example, running an database application and email server both on separate machines.

It doesn't matter how much memory you have - in today's market the whole system will grind to a halt. Single CPUs simply can't handle the multitasking the way you'd expect.

For a single machine with loads of memory it's better but not that brilliant if you have multiple applications running on the same system - regardless with the amount of memory installed. This is the very reason why big companies use not only 64bit architecture to address more memory but they also load balance the whole lot with two or more servers.

If you're really serious about performance then definitely go 64 bit but, also consider load balancing with a second server.

I've been down that road - configuring a single machine with maximum RAM. Yet when running multiple applications it still runs like a dog. That's because the CPU itself just can't handle it.

My advice is to save your bucks on memory and purchase a second server and then load balance the two. It's a lot simpler plus - once you get into the grips of it - it's easy to expand when you need more processing power and speed.

Also, a 64bit architecture machine can cope with 32bit software but with a 32 bit machine you're limited to only 32 bit or less applications - including the operating system.

Since the whole market is going 64bit in terms of both hardware and software I would advise to go 64bit for the long term but, forget the idea of squashing all onto one single machine with bucket loads of memory because you'll be disappointed.

If you are uncertain what "load balancing" is then google it.

I think it can take more than an exabyte "EB".

Look at this 32-bit processor can take 232 B = 4 GB, but at most it take 3 GB "because they are 1 GB for reversed addresses"

That means 64-bit processor can take 264 B = 16 EB, but I can't how addresses that locked for reversed used. so we can say 64-bit processor take more than 1 EB. and this specification does not depend of what the OS the PC used or what its model.

  • 1
    In practice, 64-bit processors usually have 48-bit address space which is enough for 256 terabytes of memory. – 465544 Jun 10 '13 at 8:41
  • I think you mean exbibyte, not exabyte. – martineau Jun 1 '16 at 13:19

Taking an Intel or AMD CPU as an example, there are several limitations to both physical memory and virtual memory. Other people have talked about hardware pin-out and motherboard limitations, but there are also internal limitations.

A terminal page table entry in the MMU contains 52 significant bits of physical address and can theoretically map up to 4096 TB of physical RAM.

The MMU implements a 4-level page table whose top level consists of 512 × 512 GB entries. So virtual memory is limited to 256 TB.

Insofar as I know, all 64-bit operating systems implement a DMAP (a direct-map), which is super-convenient. However, because virtual memory is limited to 256 TB, the size of the DMAP is also limited. Typically 128 TB is reserved for user mode, and 128 TB for the kernel. Of that 128 TB for the kernel, up to half may be reserved for the DMAP. Due to the usefulness of the DMAP, operating systems will usually limit physical memory to what the DMAP can handle.

So most (all?) 64-bit operating systems for Intel/AMD the physical memory supported is limited to somewhere around 64 TB, leaving 64 TB for general kernel virtual memory and 128 TB for user virtual memory.

--

Internal to the CPU, the CPU caches also have a limitation on the number of physical address bits they store, since each additional address bit eats more transistors to the cache tag. DRAM controller pin limitations are not necessarily the final word, since memory can also be addressed through DMI links.

Different CPU architectures (e.g., ARM, PowerPC, etc.) will have different limitations.

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.