Windowsではページング ファイルのことを「仮想メモリ」と呼ぶ？件

# 「仮想メモリ」はページング ファイルじゃない

ずーっと昔から気になっていたんですが、世の中でどう思われているのか気になったので書いてみます。

Wikipedia の[仮想記憶](https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E8%A8%98%E6%86%B6)というエントリからちょっと引用。

>「仮想記憶」という用語は「メモリスワッピング」と混同されることが多い。これはWindows系のオペレーティングシステム (OS) がメモリスワッピングの可 / 不可を設定する項目を "virtual memory" と称していることも一因と考えられる。実際、Windowsはその "virtual memory" を不可としても、ページング方式と仮想記憶を使用している[1][2][3]。Windows XP日本語版では、"システムのプロパティ"→"詳細設定"→"パフォーマンスオプション"→"仮想メモリ"のことである。

実際、Windows に関して話している中で「仮想メモリ」という単語が出てくるとそれは仮想記憶という仕組みのことではなく、その構成要素の一つであるページング ファイル (※) のことだけを指している、という場面には 2019 年の今でもしばしば遭遇します。
※ 「ページング ファイル」はスワップ領域、ページング・スペースなど文化圏に応じて適当に読み替えてください。

どれどれ、実際 Windows の UI ではどう表現されているの？と見てみれば、

Windows 10
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/2a73c00f-c076-6c3c-23b5-f01d9c740f0b.png" height="600"/>


Windows Server 2019
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/5e1b8b90-dca4-21bc-8b3f-69886c6e1075.png" height="600"/>

確かにこれは誤解を招きやすい UI で、Windowsでは「仮想メモリ = ページング ファイル」なのかと思われても不思議ではありません。「**仮想メモリを OFF にしたいんです！**」という多くの技術者をして腰を抜かせしめた問い合わせはここから生まれたのか。

# しかし設定項目をよく読んでみたい

私が思うにこれはページング ファイルのことを「仮想メモリ」と書いているわけではなくて、「パフォーマンス オプション」→「詳細設定」→「**仮想メモリ**」という仮想記憶に関するカテゴリ内に、設定項目がたった一つだけ存在し、それが「**すべてのドライブの総ページング ファイル サイズ**」なのでしょう。
設定項目はあくまで「**ページング ファイル サイズ**」であって、「仮想メモリのサイズ」とは書かれていませんよね。

レジストリでは ```HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management``` あたりにメモリ管理に関連する項目がいくつもあって、その中にページファイルに関連した項目もあります。例えばこんなやつ↓

- PagingFiles
- PagefileUsage 
- ExistingPageFiles

ご自分の Windows マシンで確認したい場合はコマンドプロンプトで以下のコマンドをどうぞ。

```
reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management"
```

しかし、GUI ではページング ファイルの設定だけが可能なので誤解を招いているのだと思われます。一項目しか GUI に出さないなら、「仮想メモリ」のところをそのまま「ページング ファイル」としてあれば、もっとわかりやすかったのかもしれませんね。


# ちなみにマイクロソフトのサイトでは

ちょっと古いページですが、「[RAM、**仮想メモリ**、**ページファイル**、および Windows でのメモリ管理](https://support.microsoft.com/ja-jp/help/2160852/ram-virtual-memory-pagefile-and-memory-management-in-windows)」には以下のようにあります。(太字による強調は私が付けました)

>32 ビット バージョンの Windows で実行されているすべてのプロセス (たとえば、アプリケーションの実行ファイル) には、コンピューター上の実際の RAM サイズに関わらず、0 ～ 4,294, 967,295 (2 * 32-1 = 4 GB) の範囲の**仮想メモリ** アドレス (仮想アドレス空間) が割り当てられます。

あるいはまた、

>オペレーティング ・ システムでは、使用されている**仮想メモリ** ページにのみメモリ ページのフレームが割り当てられます。

これ自体はまっとうな記述 (しかもこれ機械翻訳らしいのですが、その割には普通に読める) で、マイクロソフトがページング ファイルのことを「仮想メモリ」と定義しているわけではないことがわかります。って、OS を作っている会社だし当たり前か…

# しかし世に広がる誤解の数々
 
「Windows 仮想メモリ」でググった結果をいくつか引用してみます。頭が痛い…

その一「[Windows10 - 仮想メモリの設定・サイズ変更（カスタマイズ）](https://pc-karuma.net/windows-10-page-file-settings/)」より
>仮想メモリとは、お使いのパソコンに搭載されている物理メモリ（RAM）をWindowsシステムやアプリが使いまくった場合に不足した物理メモリを補助するファイルのことです。

**違います…**


その二「[仮想メモリの設定](https://www.pc-master.jp/sousa/s-memory.html)」より
>ハードディスク上に設定されているのが仮想メモリです。ページファイル、ページングファイルともいいます。

**違います…**


その三「[仮想メモリーが不足していますとメッセージが表示されたら仮想メモリの設定を最適化する - Windows 10](https://www.pc-master.jp/sousa/s-memory.html)」より
>仮想メモリとは、物理メモリ(メインメモリ)が不足したときにハードディスク上に設定したメモリで補助的な役割をする揮発性のメモリのことを指します。ページングファイルともいいます。

**違います…** (それにハードディスク上なら揮発性でもないのでは)


その四「[Windows 7 の仮想メモリを使用しない](https://www.tipsfound.com/windows7/02011)」より
>仮想メモリを使用しない

**たぶんページング ファイルを作りたくないということだろうけど、ページング ファイルのサイズを 0 にしてもあなたは仮想メモリ (仮想記憶) を使っています…**

# もしかしてグローバル？

意識が高いので Google を英語設定にして「Windows Virtual Memory」でググってみました。

その一「[How to manage Windows 10 Virtual Memory](https://www.geeksinphoenix.com/blog/post/2016/05/10/how-to-manage-windows-10-virtual-memory.aspx)」より
>paging file is also referred to as virtual memory. 

**え、日本だけじゃないの？！**


その二「[If Windows virtual memory is too low, you can increase it, but there are trade-offs](https://www.pcworld.com/article/2840886/if-windows-virtual-memory-is-too-low-you-can-increase-it-but-there-are-trade-offs.html)」より
>Virtual memory, also known as the swap file, 

**いやちょっと待ってくれ…**


その三「[How To Manage Virtual Memory (Pagefile) In Windows 10](https://www.tomshardware.com/news/how-to-manage-virtual-memory-pagefile-windows-10,36929.html)」より
> Because the Pagefile works as a secondary RAM, many times it is also referred to as Virtual Memory.

**人類皆兄弟**

# まとめ

- 「仮想メモリ」はページング ファイルじゃない。
- マイクロソフトさん、こんな感じでどうですか。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/376d0b07-ab7d-dcec-d88c-0891afb24154.png)

※ 「ページング ファイル」「ページ ファイル」と揺れてるのが気になるけど…


ささき