c# - 我的 CPU 支持多少内存?

标签 c# .net memory-management 32bit-64bit cpu-architecture

这是继第一个问题 ( 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 种因素会影响您搜索的值:

  1. 操作系统: 它不仅与 32 位或 64 位有关: Physical Address Extension with memory limits of Windows versions

  2. 手册或制造商网站上的 CPU 规范: 所有处理器都指定了它们的内存限制,例如您的处理器有 32GB。

  3. 手册或制造商网站上的主板规范: 所有主板都指定了它们的内存限制,例如。 32GB。

  4. CPU实际内存限制: CPU 体系结构可以是 32 位或 64 位。 一个简单的 32 位 CPU 支持 4GB 内存。在支持 PAE 的情况下,理论可寻址内存限制为 64GB,因为在这种情况下 CPU 的地址大小为 36 位。 64 位 CPU 可以寻址 16EB (16777216 TB) 的内存。

  5. 主板实际内存限制: 主板的芯片组规范是基于当前的架构,所以如果市场上没有 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/

相关文章:

java - java中本地对象的内存管理

c# - 如何在 C# 中创建安装文件

c# - 调整父窗口大小时的 WPF 调整大小/对齐按钮

c# - 执行非查询时出现SqlException 'timeout expired',但插入了数据

.net - 使用 dotPeek 打开 .dll 文件

c - 结构中的二维数组 - 可能吗?

java - 高效使用 NUMA 架构

c# - 在 ResourceDictionary 文件中使用 viewbox

c# - 使用存储 C#.Net CNG 中的 key 的 ECDSA 签名文件

.net - 如何在 Windows 窗体 TextBox 控件中设置 TAB 宽度?