这是继第一个问题 ( How to detect if CPU is 32 or 64 bit ) 之后的第二个问题。
我现在知道如何确定我的 CPU 是否具有 64 位架构。但是拥有 64 位架构并不意味着它可以处理 2^64(=16,777,216 TB)。
例如:
如果我运行这段代码:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor");
ManagementObjectCollection cpus = searcher.Get();
foreach (ManagementObject queryObj in cpus)
{
Console.WriteLine("AddressWidth: {0}", queryObj["AddressWidth"]);
Console.WriteLine("DataWidth: {0}", queryObj["DataWidth"]);
Console.WriteLine("Architecture: {0}", queryObj["Architecture"]);
}
这将导致:
AddressWidth: 32 (meaning, my OS is 32-bit)
DataWidth: 64 (meaning, my CPU is 64-bit)
Architecture: 9 (meaning 64-bit architecture)
现在我想知道我的 CPU 支持的最大内存。如果我在互联网上查找我的 CPU (http://ark.intel.com/products/65520),您会发现它只能寻址 32GB 的内存。现在如何从我的计算机中提取该信息?
警告:这个问题与我的操作系统支持多少内存无关。我使用的是 WinXP,32 位,所以它只支持 4GB。
最佳答案
简单的答案是您无法从计算机中获取该信息。
复杂的答案是,有 5 种因素会影响您搜索的值:
操作系统: 它不仅与 32 位或 64 位有关: Physical Address Extension with memory limits of Windows versions
手册或制造商网站上的 CPU 规范: 所有处理器都指定了它们的内存限制,例如您的处理器有 32GB。
手册或制造商网站上的主板规范: 所有主板都指定了它们的内存限制,例如。 32GB。
CPU实际内存限制: CPU 体系结构可以是 32 位或 64 位。 一个简单的 32 位 CPU 支持 4GB 内存。在支持 PAE 的情况下,理论可寻址内存限制为 64GB,因为在这种情况下 CPU 的地址大小为 36 位。 64 位 CPU 可以寻址 16EB (16777216 TB) 的内存。
主板实际内存限制: 主板的芯片组规范是基于当前的架构,所以如果市场上没有 32GB 内存模块,那么制造商不能写或说他们的 4 内存插槽主板支持 128GB 内存,因为他们不知道。他们说它支持 32GB 内存,因为它是用 4x8GB 内存测试的。
现实生活中的例子: 我在技嘉 GA-EX58-UD4 主板上安装了英特尔酷睿 i7-920 CPU。主板和 CPU 都支持最大。 24GB 内存基于制造商的网页,因为当时市场上只有 4GB 内存模块。但是,我在装有 Windows 7 Professional x64 的主板上使用了 48GB 的内存。它运行良好,操作系统看到并可以毫无问题地使用所有这些。 该 CPU 架构的 Xeon 版本可以使用最大。基于网页的 144GB 内存。该限制与支持的主板的一个 CPU 内存限制相同,因为没有更大容量的内存模块可供测试。
因此,基本上有很多因素和规范可以考虑,但没有真正的方法来获得确切系统的确切可寻址内存量。
关于c# - 我的 CPU 支持多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16374966/