我可以在特定硬件上使用的最大RAM量是多少

我有一台带有i5-2430M CPU的华硕U31SD笔记本电脑。 华硕网站称最大内存为8 GB,但英特尔表示我的CPU支持16 GB。 在Ubuntu下我可以在这个系统上使用的最大RAM是多少?

限制实际上是在您的硬件(主板内存支持和其中的插槽数量)和Ubuntu版本(32位,32位+ PAE,x32ABI,64位)之间

如果您的主板支持最大4GB,则使用32位,32位PAE或64位无关紧要,因为您的硬件限制为4GB。

但是如果你购买支持更高内存的主板,你可以使用Ubuntu的版本,它们具有以下最大支持内存:

Ubuntu 32位 – 4GB RAM

Ubuntu 32位+ PAE(物理地址扩展) – 64GB RAM

Ubuntu x32ABI – 4GB RAM(这是针对32位架构进行了修改,在64位硬件上运行64位增强function。尚不可用。)

Ubuntu 64位 – 很多! (实际上是2 ^ 64)但是由于硬件限制和现实世界的计算机,限制大约是1TB(1024GB RAM)

因此,当您使用超过4GB的RAM时,应该使用有关内存限制的问题。 在这种情况下,您需要32位PAE或64位,它们支持非常大的内存大小。

另请注意,如果您现在拥有4GB,并且购买了16GB的ram,则无需重新安装Ubuntu或进行任何更改。 只需改变记忆,Ubuntu应该阅读并开箱即用。 无需配置。 如果你有32位4 GB RAM,你安装16GB或RAM,Ubuntu将自动从32位更改为32位PAE。 我可以保证这一点,因为我在今年年初从4GB变为16GB。

这是一个关于Ubuntu关于32/64内存的非常好的解释的链接: https : //help.ubuntu.com/community/32bit_and_64bit#Memory

更新 – 忘记添加一些主板具有BIOS更新,以启用,更正或增强支持的最大内存。 例如,过去一些英特尔主板在使用它们支持的最大值时遇到了问题。 BIOS更新解决了这个问题。 由于BIOS问题,其他主板支持4GB,升级后支持超过4GB。

同时比较CPU和主板的最大支持内存,您可以拥有的最大值是其中任何一个的最小值。 例如:

情况1
CPU最大支持内存 – 16GB
主板最大支持内存 – 8GB
您的最大支持内存 – 8GB (因为CPU和主板之间的最低值)

案例2
CPU最大支持内存 – 16GB
主板最大支持内存 – 32GB
您的最大支持内存 – 16GB (因为CPU和主板之间的最低值)

案例3
CPU最大支持内存 – 16GB
主板最大支持内存 – 64GB
您的最大支持内存 – 16GB (因为CPU和主板之间的最低值)

内存限制与CPU关系背后的原因是英特尔对最新的核心CPU进行了技术修改。

所以在你的情况下,你有一个支持8GB的主板和一个支持16GB的CPU。 这意味着您可以使用的最大值为8GB,具体取决于主板上的插槽数量。 在华硕你有2个插槽,这意味着你可以有两个4GB的RAM来完成最大8GB。

有关x32abi的更多信息:

KernelNewbieshttp://kernelnewbies.org/Linux_3.4#head-039c9d273884c9639937c10d68b4a3214869eb4b

LWNhttps://lwn.net/Articles/456731/ (推荐阅读评论,以便于学习有关内存限制的说明)

Googlehttp://sites.google.com/site/x32abi/

最后,自Ubuntu 12.04以来,所有32位版本的Ubuntu都默认激活了PAE,因此所有32位将支持最大64 GB的RAM。 如果您使用12.04+并想知道要使用哪种体系结构,您现在知道只要您遵循一些建议就可以使用它们中的任何一种:

  • 如果你有512 MB或更少的RAM,强烈建议使用32位

  • 如果你的RAM少于4 GB但超过512 MB,建议使用32位(但你仍然可以使用64位)

  • 如果你有4 GB的RAM,建议使用32位(但你仍然可以使用64位)

  • 如果你有4 GB或RAM和64 GB的RAM,你可以使用32位或64位,但建议使用64位。

  • 如果你有超过64 GB的RAM,你需要使用64位

对于32位,理论上的限制是2 ^ 32 = 4096 MB,但是PAE(物理地址扩展)上的Ubuntu 12.04默认打开,限制为2 ^ 36 = 64 GB。

对于64位,它应该是2 ^ 64 = 16 777 216 TB(是的,这是Terabyte)。 实际上,RAM的数量限制为2 ^ 48,即256 TB的RAM。

由于在普通笔记本电脑中无法真正达到理论极限,因此实际的限制是笔记本电脑中的内存插槽(通常为1-2)以及芯片组的支持。 如果您愿意为8 GB模块支付高额费用,那么8-16 GB是现实的。

我刚购买了额外的8GB以便在我的U31SD中弹出,总共12GB。 尽管华硕规格页面说8GB是限制,这个工作正常。 通过memtest86,64位Ubuntu可见。

我安装了最新的BIOS更新,不确定是否有任何区别。

仅供参考, sudo dmidecode -t 16输出表示Maximum Capacity: 16 GB

这是对主板的限制而非CPU上的限制。 CPU可能能够支持高达16GB,但如果主板只能占用8GB,那么这就是你的极限。

在Ubuntu中,如果你运行的是32位,那么你的限制是4GB,如果你运行的是64位,它会高得多(不能记得肯定,但它远远超过16GB。

但是你总是受到硬件的限制。 您必须始终比较主板限制和CPU限制,并将最低值作为PC的限制。

在您的具体情况下,8 GB是由于您的主板不支持超过该数量的RAM。

但Ubuntu本身支持32位的最大4 GB,32位PAE的 64 GB和64位的128 GB(尽管理论上64位的上限要高得多)。

是什么决定了指针的大小。 基本上作为一个经验法则,你可以说这是处理器架构,

 x86 -> 4 bytes pointer -> can address 4,294,967,296 locations = 4GB (it is the limit) x64 -> 8 bytes pointer -> can address 1.84467440737e+19 locations (it is the limit, big, eh) 

要解决8GB的RAM,需要8,589,934,592个映射,大小为4个字节的指针不能解决所有可能的值。 所以这就是为什么我不能在x86架构上拥有超过4GB的RAM。

还有一些其他的可能性:

RAM的数量不受架构限制(32或64位)。 架构仅决定操作系统及其上运行的程序一次可以处理多少内存。 在32位机器上,即具有32位宽内存总线的机器上,操作系统和程序只能“看到”4 GB的内存。 但这并不意味着只有4 GB的RAM。 如果制造商已提供,则可以使用16 GB或4×4 GB的RAM。 在这种情况下,将有2个“隐藏”地址线,并且还有硬编码逻辑来决定这2行的电平,从而选择任何可用的4 GB RAM – 00 01 10 11。 软件层不使用这些“隐藏”地址位,因此对于这些层,它们只能使用4字节指针。 这些“隐藏”地址行的数量决定了您可以扩展RAM的程度。

这只是一个例子。 这取决于供应商,他们如何决定提供额外的RAM。

也可以看看:

在通常情况下,指针足够大以容纳比系统中存储器单元更多的地址。 这引入了程序可能尝试访问对应于没有存储器单元的地址的可能性,因为没有安装足够的存储器(即超出可用存储器的范围)或者该体系结构不支持这样的地址。 在某些平台(如Intel x86架构)中,第一种情况可称为分段故障(segfault)。 第二种情况在AMD64的当前实现中是可能的,其中指针是64位长并且地址仅扩展到48位。 在那里,指针必须符合某些规则(规范地址),因此如果取消引用非规范指针,处理器会引发一般保护错误。

另一方面,一些系统具有比地址更多的存储器单元。 在这种情况下,采用更复杂的方案,例如存储器分段或寻呼,以在不同时间使用存储器的不同部分。 x86架构的最后一个版本支持多达36位的物理内存地址,这些地址通过PAE分页机制映射到32位线性地址空间。 因此,一次只能访问可能总存储器的1/16。 同一计算机系列中的另一个例子是80286处理器的16位保护模式,虽然只支持16 MiB的物理内存,但最多可以访问1 GiB的虚拟内存,但是16位地址和段的组合寄存器在一个数据结构中访问超过64 KiB是麻烦的。 ANSI指针算法的一些限制可能是由于该处理器系列的分段存储器模型造成的。[引证需要]

为了提供一致的接口,一些架构提供了内存映射I / O,允许一些地址引用内存单元,而其他地址引用计算机中其他设备的设备寄存器。 存在类似的概念,例如文件偏移,数组索引和远程对象引用,其用于与其他类型的对象的地址相同的目的。

(更多这里 )