Windows:32bitアプリケーションを、64bitOSで動かす場合のメモリ
ちょっとIllustratorでそういう話があって調べてみた。
原因はメモリじゃないかもしれないけど……。
下記いろんな情報まとめたけど、理解ついでに書いてるので間違えてる可能性があります。
まず結論は、1プロセス毎に4GBの仮想アドレス空間を割り当てられる。
つまり、1プロセス毎に最大4GBのメモリ利用可能、のよう。
64bitOSにしっかりメモリが乗ってれば、ページアウトすることなく、
1つのアプリケーション(たとえばIllustrator)が4GB丸々使えるようだ。
32bitOSだと、システム全体で4GBの仮想アドレス空間にしか無く、
デバイスなどのシステム予約領域や、VRAMとして割り当てで割かれるため、
おおよそ1GB前後4GBから減って3GB前後しかアプリケーションで使えない。
————————————————————————————————-
ついでに64bitOS上で32bitアプリケーションを動かす機構
Wikipedia – WOW64
WindowsVista以降、64bitのOSで32bitアプリケーションを動かす場合、
WOW64(Windows32 on Windows64)というのを使ってエミュレーションしている。
簡単に言えば、32bitアプリケーションを、あたかも64bitアプリケーションみたいに動かす。
32bitの命令コード(CPUに出す指示)を64bitの命令コードに変換する作業も行われるが、
これら2つの命令コードには互換性がある為、変換は最小限に済む。
32bitOS上と64bitOS上で32bitアプリケーションの動作はほぼ同じ速度で動作する。
むしろ、64bitOSではハードウェアの動作性能が上がる為、32bitOS上で32bitアプリ
ケーションを利用するよりも、速度が速い可能性がある。
————————————————————————————————-
このWOW64が、アプリケーションごとに4GBの仮想アドレス空間を割り当てる。
そして、OSが、このWOW64で作った仮想アドレス空間複数と、64bitアプリケーション
が作るすごいでかい仮想アドレス空間複数を、物理アドレス空間(実メモリ)へ割り当てる。
なので、WOW64がエミュレーションを行っているが、32bitアプリケーション全てを
まとめて4GBのアドレス空間内で処理しているわけではなく、1つ1つのアプリケーション
に対して4GBのアドレス空間を与えてくれる為、メモリ16GB合っても、32bitアプリケーション
で4GBで、残り12GBが64bitアプリとシステム領域、ということにはならない。
なんか色々あれこれ散らばってるけどこんな感じで。
x64で本格化する64ビットWindowsの時代(2)
Can’t locate Net/Twitter/Role/API/RESTv1_1.pmのエラー Mozilla Thunderbird がなんかおかしい