64位机器理论上到底能放多少内存

本文探讨了64位计算机理论上能够寻址的内存容量与其实际可达上限之间的差异,通过理论分析和实践考量揭示了内存容量受限于硬件、空间和技术发展等多方面因素。
http://www.geekfan.net/4345/


大部分从32位系统升级到64位的人,主要是为了突破4GB内存的限制。到底进入64位之后,你的内存容量能达到多大呢?


今天的问答来自SuperUser——Stack Exchange的分支。这是一个社区驱动型的Q&A网站。


问题


SuperUser的读者KingNestor想知道64位能跑多少内存:在关于计算机架构的书中,我发现x86,32位CPU的程序计数器(指令地址寄存器)是32位的。


因此,它可以寻址2^32字节,也就是4GB。也因此,大部分32位机器的内存限制是4GB(忽略PAE)。


那到底64位机器理论上可以寻址2^64字节,也就是16EB内存,对吗?


你说EB?唔,不要这么贪心,有个1,2TB就很满足了~


回答


关于这个问题的探究,那是一个有趣的,理论与实践的结果。Matt Ball马上就来了一个理论上的答案:


理论上是168, 000, 000TB(就是16EB)。实际上,要塞下那么多内存,你的电脑有点太小了。


Conrad Dean插了一脚,他表示以今天的技术,不可能达到(64位)理论上的内存上限。


补充Matt Ball的回答。目前我从特别的在线零售店能找到的,最大容量的内存条是32GB。组成1TB就需要32条。每条内存大概是半英寸宽,那么你在主板上就要16英寸的空间来放这1TB的商用内存。要到168, 000, 000TB,那就是4, 242.42英里的主板。从洛杉矶到纽约大约是2141英里。这块主板要来回一趟才能装下那么多内存。


明显这达不到。


如果我们不像大部分主板那样,把所有内存放在一行上,而是并排放。我想说,每条内存是6英寸长,算上半英寸的宽,你需要6平方英寸来放12条内存。设这是一个”内存块“,那就是384GB内存。跑到上限需要44, 800, 000块,麻烦点算下,那就是6693×6694的矩形,或者说是13, 386×13, 388英尺。如果西雅图人没意见,那就可以把整个地方遮蔽起来。


最后,David Schwartz提出,即便是CPU架构都很难达到理论上限。


实际上不存在x86 64位处理器能达到。它们的缓存中没有足够的特征字节,地址总线也不够宽……46位(8TB)是大部分现代x86CPU的上限。


还有其它要补充的不?留下你的评论。想读其它Stack Exchange科技迷的回答?


来这看完整的讨论。
http://superuser.com/questions/65191/what-is-the-maximum-amount-of-ram-a-64bit-machine-can-theoretically-address
### 32系统与64系统的区别 3264系统之间的主要区别体现在个方面,包括内存支持、数据处理能力、软件兼容性以及系统架构等。 32系统能够支持的最大内存容量为4GB,这是因为32地址总线可以寻址的地址空间是2^32个不同的地址,每个地址对应一个字节,因此总共可以寻址4,294,967,296字节(即4GB)。然而,在实际应用中,用户可用的内存通常少于这个数值,因为一部分内存需要被保留给系统内核使用[^4]。相比之下,64系统理论上可以支持高达16EB(Exabytes)的内存,尽管在当前的技术条件下,实际支持内存容量远低于理论值,但它足以满足现代高性能计算的需求[^1]。 从数据处理角度来看,64处理器可以在单个时钟周期内处理更的数据。具体来说,64处理器能够直接处理更大的整数,并且对于某些类型的数据运算,如大整数运算或高精度计算,效率更高。此外,64架构通常会提供更的寄存器数量以及更宽的寄存器宽度,这有助于提高程序执行的速度[^1]。 软件兼容性方面,64操作系统一般向下兼容32应用程序,这意味着大数为32系统设计的应用程序可以在64系统上运行,但反之则不成立。不过,有些旧的驱动程序或者软件可能无法在64系统上正常工作,特别是那些依赖于特定硬件接口或底层系统调用的软件[^2]。 系统体积上,64操作系统由于需要支持的功能和更大的内存模型,其安装文件和运行时占用的空间通常比32版本要大[^3]。 最后,从系统架构的角度来看,3264系统中定义的一些基本数据类型长度是固定的。例如,`uint32_t`始终是一个4字节(32)的无符号整数,而`uint64_t`则始终是一个8字节(64)的无符号整数。这种固定大小的数据类型定义有助于确保跨平台开发时的数据一致性[^5]。 ### 示例代码 以下是一个简单的C语言示例,展示了如何声明和使用3264无符号整数: ```c #include <stdint.h> #include <stdio.h> int main() { uint32_t my32BitVar = 0xFFFFFFFF; // 32无符号整数 uint64_t my64BitVar = 0xFFFFFFFFFFFFFFFF; // 64无符号整数 printf("32-bit variable: %u\n", my32BitVar); printf("64-bit variable: %llu\n", (unsigned long long)my64BitVar); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值