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?
feedback
|
This question came from our site for professional and enthusiast programmers.
|
There are multiple interleaving factors. First of all, you will never, ever be able to assemble a system that has 2^64 bytes (16 exabytes) 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 (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, 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). | |||
feedback
|
|
A 64-bit machine should be able to address up to 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). | |||
|
feedback
|
|
That would depend if the machine was byte-addressable or used some other method. I mean, what if address 0 was the first 8 GB, address 1 another 8 GB... that would mean 2^64 * 8GB worth of addressable memory. | |||
|
feedback
|
|
If you use MS Windows, the maximum memory is constrained by the operating system. For Windows 7, the maximums are:
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. | |||
|
feedback
|
|
The smallest addressable memory pointer is to a byte, so the total should be 2⁶⁴ bytes, which is 18446744073709551616 bytes. Windows limits the addressable memory to certain amounts based on the editions because that's one of their methods of market segmentation: want more memory? Buy edition Y instead of X. | |||||||||||
feedback
|
|
Largely depends on how the OS 'pages' memory in/out of processes. If you want to understand application performance when memory limits are important I suggest you learn about virtual memory. | |||
|
feedback
|
|
Yes, you're right. Theoretically 64 bits cpus can address up to 2^64 bits. Anyway, existing OS can't. Maximum RAM allocation: LINUX X86_64 KERNEL: 16 exabytes MAC OS X SNOW LEOPARD: 16 terabytes WINDOWS 7 ULTIMATE: 192 gigabytes Possible values may change due to various hacks, patches etc... | |||
|
feedback
|
|
64-bit architecture will allow systems to address up to 1 terabyte (1000GB) of memory | |||||
feedback
|