x86 アプリケーションは x64 オペレーティング システムで 64 ビット アドレスを使用しますか?

x86 アプリケーションは x64 オペレーティング システムで 64 ビット アドレスを使用しますか?

疑問に思ったのですが... 64 ビット OS は 32 ビット アプリケーションを実行できるんですよね? Windows はこれを実現するために WoW64 を使用しますよね?

私の質問は、これらのアプリケーションを実行するときに、64 ビット アドレスと 32 ビット アドレスのどちらを使用するかということです。メモリ使用量の点から疑問に思っていました...

答え1

内部的には、すべてのプログラムが約 2 GB のメモリ空間を認識します (3 GB を取得するためのフラグを設定できます)。そのため、64 ビット ポインターが必要になることはありません (32 ビット ポインターで問題なく動作します)。OS は、64 ビットの実際のメモリ管理をすべて内部で処理できます。

これがメモリ使用量とどう関係するのかよく分かりません。

答え2

32 ビット アプリケーションは 32 ビット アドレスしか認識できません。WoW64 は、32 ビット アプリケーション用に 64 ビット メモリ空間内で 32 ビット環境をシミュレートします。

答え3

仮想メモリ アドレスと物理メモリ アドレスを区別していないため、質問はあまり具体的ではありません。

はい、x86 プログラムはより多くのメモリとリソースを使用します。32 ビットの仮想アドレス空間を持ちますが、その下にはメモリ マネージャー (MM または MMM) が x64 ポインターを使用します。ただし、それほど多くの労力がかかるわけではありません。

これまでのところ、最も大きなリソース コストはドライバーです。セキュリティ上の理由によるカーネルの大幅な変更がいくつかあり、ドライバーの大部分を書き直す必要がありました。

内部的には、すべてのプログラムが約 2 GB のメモリ空間を認識します (3 GB を取得するためのフラグを設定できます)。そのため、64 ビット ポインターが必要になることはありません (32 ビット ポインターで問題なく動作します)。OS は、64 ビットの実際のメモリ管理をすべて内部で処理できます。

これは正しくないと思います。すべてのプログラムは 4GB (32 ビット仮想アドレス空間) を認識しますが、カーネルは物理アドレス空間を半分に分割します。皆さんがよく知っている 2 つの 2GB は、物理メモリ アドレスを指します。

関連情報