如何询问windows RAM是在单通道、双通道还是四通道中运行?

如何询问windows RAM是在单通道、双通道还是四通道中运行?,windows,language-agnostic,wmi,ram,Windows,Language Agnostic,Wmi,Ram,如何检测当前的RAM配置?我需要询问windows,RAM当前是否在单通道、双通道或四通道中运行 我搜索了很多,但在这个或其他网站上没有发现任何类似的问题,这让我很惊讶 我使用的是C++,但这个问题实际上同样适用于所有编程语言,因为它是关于windows函数或powershell/cmd命令将为我提供所需的信息。交错位置是您要寻找的。其中一个显示为2,2,2,因为它在双通道中运行3个杆。您需要了解的是如何识别运行单个通道的机器,以便可以使用此命令的输出: wmic memorychip get

如何检测当前的RAM配置?我需要询问windows,RAM当前是否在单通道、双通道或四通道中运行

我搜索了很多,但在这个或其他网站上没有发现任何类似的问题,这让我很惊讶


我使用的是
C++
,但这个问题实际上同样适用于所有编程语言,因为它是关于windows函数或
powershell
/
cmd
命令将为我提供所需的信息。

交错位置
是您要寻找的。其中一个显示为
2,2,2
,因为它在双通道中运行3个杆。您需要了解的是如何识别运行单个通道的机器,以便可以使用此命令的输出:

wmic memorychip get InterleavePosition
编辑:实际上不确定3支杆的双通道。一些研究表明,现在大多数主板都会将奇数单通道

因此,从MSDN来看,这是我们在挖掘关于交错内存的系统信息时必须处理的问题

Position of the physical memory in an interleave. For example, in a 2:1 interleave, a value of "1" indicates that the memory is in the "even" position.

This property is inherited from CIM_PhysicalMemory.

0 - Noninterleaved

1 - First position

2 - Second position
加上
InterleaveDataDepth
,说明:

InterleaveDataDepth

Unsigned 16-bit integer maximum number of consecutive rows of data that are accessed in a single interleaved transfer from the memory device. If the value is 0 (zero), the memory is not interleaved.
请注意,interleave是“相互共享”的一个花哨的词,它类似于当今的多渠道,但它不是一回事。从wiki的交错内存:

它不同于多通道内存体系结构,主要是 交错内存不是在主内存之间添加更多通道 以及存储器控制器。然而,信道交织也很重要 可能…[]

使用此命令,我将使用cmd.exe在双通道中共享4个RAM条的外观:


编辑:一些人已经确认这些值在某些机器上运行正常,但经常返回令人费解/无意义的值

查看SMBIOS规范:。实际上,最新版本的日期是2018年5月14日

第1步: 您需要从中读取
当前交织
7.6内存控制器信息(类型5)
适用于旧版本,然后按照说明阅读最新结构

步骤2:您需要从以下位置获取内存设备:

7.38 Memory Channel (Type 37) 幸运的是,在SMBIOS规范中有一些示例

例如,查看第7.7.3节“内存子系统”:

04h ; 2-way interleave currently used 04h;当前使用的双向交织 由于规范经常会发生变化,有些已经过时,我不会依赖任何现成的Windows WMI/API。我建议您最好的方法是一次性读取原始SMBIOS数据,并构建一个简单的表,如上图所示。以下是如何:

此外,我相信你不能对实际的有效信道速度做任何进一步的假设。您可能需要收集有关每个DIMM模块速度的其他信息


IMHO,发布此类任务的源代码远远超出了当前的问题范围,因此有一些链接:关于该主题的最佳参考是,但由于我对Delphi感觉良好,我更愿意查看此Delphi/FPC帖子:。

出于好奇,平台是否提供此类信息?在嵌入式系统中,我们必须依赖于平台示意图。这是一个起点吗?WMI似乎是正确的部分:CPU-Z能够正确检测RAM的通道配置,因此,如果该软件能够在windows上检测到它,我的软件很可能也能够检测到。嗯……如果是关于所有编程语言,那么问题应该标记为
语言不可知
,而不是特定语言。在现实中,虽然听起来你想要一个C++的答案,它会不同于一个PuxSear的答案,而且在CMD中可能是不可能的。你可以使用<代码> Wi32内存> /Cord> WMI类,并访问<代码> DeVeleCopor < /Cuth>成员,找出安装了DIMM时隙RAM。
C:\Windows\System32\wbem\WMIC.exe
我现在已经测试了一台单通道PC,其中InterleavePosition的输出是
0
。我应该如何解释这些数据?在1个单ram模块的情况下,很容易知道它确实是单通道的,但是运行单通道的两个ram模块很可能会说
0,0
2,2
,那么我如何从中检测通道的数量呢?我对MSDN中的交织信息的编辑应该会有所帮助,但如果在交织数据深度中说
0
,它是非交错的意思是单通道。我还要指出,在我的机器上交错位置是空的。因此,与WMI中的许多硬件类一样,这首先取决于制造商是否将信息写入WMI。@JohnAl:CPU-Z只是“询问Windows”不是真的。当然,它使用Windows API来获取数据,但它可能会获取原始二进制固件表,然后解释内容本身。因此,可能没有任何Windows API来执行此解释。
Channel 1: DIMM #0
Channel 1: DIMM #1
Channel 2: DIMM #0
Channel 2: DIMM #1
04h ; 2-way interleave currently used