Windows でメモリ関連の話をするときに噛み合わないな思い、これを説明することがよくあります。
よく聞く間違い
Windows で仮想メモリに関連する設定は、パフォーマンス オプションにあり、pagefile.sys の配置先ドライブやサイズを変更できます。仮想メモリという項目で設定できるので、仮想メモリ = pagefile.sys と考えている人を見かけますが、それは正しくないので注意が必要です。
[変更] ボタンからページ ファイルの設定を変更できますが、今回は設定方法の話ではないので、設定方法を知りたい方は別の Web サイトに詳しく書いたので、そちらをご覧ください。
ページ ファイルの設定を変更する方法 | Microsoft Japan Windows Technology Support Blog
https://jpwinsup.github.io/blog/2023/02/08/Performance/Hang_BSOD/HowToChangePagingFileSetting/
仮想メモリの設定項目って何ができるの?
この設定では、ページ ファイル(pagefile.sys)のサイズを変更することで、仮想メモリのサイズを変更できます。ということは、"仮想メモリ = pagefile.sys" であってるのでは?っと思ってしまいますが、仮想メモリのサイズには、物理メモリのサイズが含まれるので、これが間違いになります。
仮想メモリのサイズ
仮想メモリのサイズは、物理メモリのサイズとページ ファイルのサイズを足したものになります。つまり、以下の数式が成り立ちます。
仮想メモリのサイズ = 物理メモリのサイズ + ページ ファイルのサイズ
端末に搭載している物理メモリのサイズが 4096 MB で、ページ ファイルのサイズを 1024 MB に設定すれば、仮想メモリのサイズは、5120 MB になります。
なお、仮想メモリのサイズ、物理メモリのサイズ、ページ ファイルのサイズは、PowerShell コマンドで確認できます。
$wmiobject = Get-WmiObject Win32_OperatingSystem
# 仮想メモリのサイズ
Write-Output "Virtual Memory Size (KB): $($wmiobject.TotalVirtualMemorySize.tostring("#,0"))"
# 物理メモリのサイズ
Write-Output "Visible Memory Size (KB): $($wmiobject.TotalVisibleMemorySize.tostring("#,0"))"
# ページ ファイルのサイズ
Write-Output "Page File (KB): $($wmiobject.SizeStoredInPagingFiles.tostring("#,0"))"
Win32_OperatingSystem class - Win32 apps | Microsoft Learn
https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-operatingsystem
もう一つの間違い
「ページ ファイル(pagefile.sys)って物理メモリが不足したときに使用される領域でしょ!」と考えていたらそれも間違いです。
物理メモリが不足していなくても使用されます。疑い深い人は、物理メモリが不足していない状態で、以下の PowerShell コマンドを実行し、CurrentUsage が0でないことを確認してみてください。
Get-WmiObject Win32_PageFileUsage | Select-Object Name, AllocatedBaseSize, CurrentUsage | fl *
# 実行結果例
# Name : C:\pagefile.sys
# AllocatedBaseSize : 33168
# CurrentUsage : 638
Win32_PageFileUsage class - Win32 apps | Microsoft Learn
https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-pagefileusage
さいごに
じゃあ仮想メモリって一体なにというかんじだと思いますが、それは別の投稿にしようかなと思っています。