PCのメモリ増設に関する覚書

# 今回の内容
　ノートPCにメモリ増設したくなった時に何をチェックすればよいかのメモです。
 （デスクトップ型でも考え方は同じです）

# メモリ増設時の注意点
　メモリを増設するにはスロットの空きが必要です。ノートPCの場合、普通はメモリスロットは２つで、もしその２つのスロットに4GBのメモリモジュールが２つ刺さっていたら増設するにはその4GBのメモリモジュールのうちの１つを抜いて入れ替える必要があります。そこに8GBのメモリを買って来ても4GBのモジュールと入れ替えになるので合計メモリサイズは12GBになるだけです。スロットに空きがあるかどうかは筐体を開けてみればよいのですが、開けなくてもタスクマネージャーの表示である程度はわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/f5b622e2-d566-1f44-a188-919ba3f51f30.png)
メモリのタブで「スロットの使用：1/2」となっていれば、２つあるスロットのうち１つが空いている可能性が高いです（というのは、必ず正しい値が表示されているとは限らないらしいので） 。

この表示では、「速度」はそのメモリのクロック周波数が 2,133MHzという意味で、「フォームファクター」とはメモリモジュールの形状に関する規格です。SODIMM はノートPC用、DIMMならデスクトップ用のメモリモジュールとしてよく使われている規格です。
メモリにはさらにもっと細かい規格があり、適切な規格のモジュールを買って来ないとそもそもスロットに刺さらないとか、刺さっても動作しないとかいうことが起こります。ですので、購入前にまず今使われているメモリがどういう規格なのか調べ、それと合わせる必要があります。



## メモリの詳細情報を知るには
　その方法を２つ書きます。

### 手段１．CPU-Zを使う
　現在どんなメモリが載っているのか詳細を調べるのに一番簡単な方法は、CPU-Zというフリーのツールを使うことです。

https://www.cpuid.com/softwares/cpu-z.html

　メモリモジュールにはSPD(Serial Presence Detect)と呼ばれる規格でそのメモリの詳細情報を取得できる仕組みが組み込まれており、CPU-ZはこのSPDからメモリの詳細情報を取得して表示してくれます。以下は手元のPCで表示させてみたものです。（※上のタスクマネージャーで表示したのとは別のマシンです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/29aead4e-ce00-39b2-18fb-ba73b3f9b533.png) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/f3b61c60-6160-5952-f5a8-c76cdf008845.png) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/81d037e5-5c3c-74db-dcf2-79dd3a269c60.png)

ここに出ている情報についてすべては説明しませんが、各画面の情報から以下のようなことがわかります。

* ２つあるスロットのうち１枚にモジュールが刺さっている。
* 動作モードは[シングルチャネル](https://chimolog.co/bto-ram-single-vs-dual/)である
* メモリの世代はDDR4で、サイズは8GBである。
* 最大帯域幅は 2,666MHz である。
* このメモリモジュールの製造元は SK Hynix 社である。
* このメモリモジュールの型番は HMA81GS6CJR8N-VK である。


### 手段２．WMIの情報を見る
　増設するのが職場のPCの場合、CPU-Z のようなフリーのツールを入れることはセキュリティ上許されないということもあると思います。
そのような場合は [WMI(Windows Management Instrumentation)](https://e-words.jp/w/WMI.html) を使って、ある程度の情報を得ることが可能です。WMIの情報を取り出すコマンドとしてwmicというものがあるのでこれをコマンドラインから叩くことができます。

```:コマンドライン
C:\>wmic memphysical get MaxCapacity, MemoryDevices
MaxCapacity  MemoryDevices
33554432     2
```

メモリスロットが２つあって、最大32GBのメモリが載せられることがわかります。

```:コマンドライン
C:\>wmic memorychip get manufacturer, ConfiguredClockSpeed, capacity, partnumber, speed, devicelocator, formfactor,MemoryType
Capacity    ConfiguredClockSpeed  DeviceLocator  FormFactor  Manufacturer  MemoryType  PartNumber        Speed
8589934592  2400                  DIMM1          12          SK Hynix      0           HMA81GS6CJR8N-VK  2667
```

wmic memorychip で返される行数が今刺さっているモジュールの数を表しています。


　同様の情報は、PowerShell で Get-WmiObject コマンドレットを使っても取得可能です。

```:PowerShell
PS C:\> Get-WmiObject -Class Win32_PhysicalMemory -ComputerName "localhost" | select *

PSComputerName       : Hoge
__GENUS              : 2
__CLASS              : Win32_PhysicalMemory
__SUPERCLASS         : CIM_PhysicalMemory
__DYNASTY            : CIM_ManagedSystemElement
__RELPATH            : Win32_PhysicalMemory.Tag="Physical Memory 0"
__PROPERTY_COUNT     : 36
__DERIVATION         : {CIM_PhysicalMemory, CIM_Chip, CIM_PhysicalComponent, CIM_PhysicalElement...}
__SERVER             : Hoge
__NAMESPACE          : root\cimv2
__PATH               : \\Hoge\root\cimv2:Win32_PhysicalMemory.Tag="Physical Memory 0"
Attributes           : 1
BankLabel            : NULL
Capacity             : 8589934592
Caption              : 物理メモリ
ConfiguredClockSpeed : 2400
ConfiguredVoltage    : 1200
CreationClassName    : Win32_PhysicalMemory
DataWidth            : 64
Description          : 物理メモリ
DeviceLocator        : DIMM1
FormFactor           : 12
HotSwappable         :
InstallDate          :
InterleaveDataDepth  :
InterleavePosition   :
Manufacturer         : SK Hynix
MaxVoltage           : 1200
MemoryType           : 0
MinVoltage           : 1200
Model                :
Name                 : 物理メモリ
OtherIdentifyingInfo :
PartNumber           : HMA81GS6CJR8N-VK
PositionInRow        :
PoweredOn            :
Removable            :
Replaceable          :
SerialNumber         : 2EBE1157
SKU                  :
SMBIOSMemoryType     : 26
Speed                : 2667
Status               :
Tag                  : Physical Memory 0
TotalWidth           : 64
TypeDetail           : 16512
Version              :
Scope                : System.Management.ManagementScope
Path                 : \\Hoge\root\cimv2:Win32_PhysicalMemory.Tag="Physical Memory 0"
Options              : System.Management.ObjectGetOptions
ClassPath            : \\Hoge\root\cimv2:Win32_PhysicalMemory
Properties           : {Attributes, BankLabel, Capacity, Caption...}
SystemProperties     : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY...}
Qualifiers           : {dynamic, Locale, provider, UUID}
Site                 :
Container            :
```

* Capacity から、このモジュールのメモリサイズが8GBであることがわかります。
* Manufacturer から、メーカーが SK Hynix社であることがわかります。
* PartNumber から、型番が HMA81GS6CJR8N-VK であることがわかります。
* FormFactor = 12 からフォームファクタがSODIMM であることがわかります。これが8だとDIMMを意味します。
* MemoryType = 0 は世代不明を表すようですが、DDR4の場合こうなるようです[^2]。これが 24 なら DDR3です。

各値の意味など詳しく知りたい場合はこちら↓にドキュメントがあります。

https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-physicalmemory

[^2]: 本来DDR4には26が割り当てられているようですが、なぜか実装できていない模様。

## 詳細情報を得た後は
　ここまでわかれば、増設メモリはどういうものを買えばよいかわかると思います。今刺さっているメモリと同じメーカーの同じ型番の製品をもう一つ買うのが相性の問題も起こらず、最も安全な選択であると言えます。HMA81GS6CJR8N-VK で検索してみると、中古市場で買えないことも無いようですが、相場よりも少々高い感じがします。
　そこで同じ型番のメモリを買うのはあきらめるとしても、同じ規格のメモリモジュールを買えばまず問題はないでしょう。
HMA81GS6CJR8N-VK の検索結果から、以下のような規格であることがわかります。

* 世代：DDR4 
* 動作周波数：2,666MHz 
* メモリ帯域幅：21,300MB/s
* ピン数：260pin 
* フォームファクタ：SO-DIMM

これらの規格が同じメモリモジュールを買えば、動作する可能性が高いです。特に世代(DDR4)は必ず合わせる必要があります。ピン数、フォームファクタも同じでなければ物理的にスロットに刺すことができません。動作周波数などは、違っても遅い方に合わせて動くことが多いようですが、合わせておいた方が無難でしょう。


# 今回のメモリ増設結果
　以上で今回の話は終わりなのですが、蛇足として、今回実際に購入したメモリ（同じ型番ではなく、同じ規格の安いメモリを購入）を増設してみた結果を載せておきます。

```:コマンドライン
C:\>wmic memphysical get MaxCapacity, MemoryDevices
MaxCapacity  MemoryDevices
33554432     2

C:\>wmic memorychip get manufacturer, ConfiguredClockSpeed, capacity, partnumber, speed, devicelocator, formfactor,MemoryType
Capacity    ConfiguredClockSpeed  DeviceLocator  FormFactor  Manufacturer  MemoryType  PartNumber        Speed
8589934592  2400                  DIMM1          12          0000          0           GDG8GBA8S266      2667
8589934592  2400                  DIMM2          12          SK Hynix      0           HMA81GS6CJR8N-VK  2667
```

今回は MMOMENT という台湾のメーカーのものを買いました。残念ながらSPDへの対応が甘いようでメーカー名が正しく取得できないようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/9566f18d-f78a-99b9-9e98-204e3f5ddf10.png)

ひとまず無事増設に成功しました。
今回は以上です。ここまでお読みいただきありがとうございました。