Q - 64ビット仮想メモリ - ポインタ変数の正しいアドレス

Q - 64ビット仮想メモリ - ポインタ変数の正しいアドレス

模擬試験には次の問題が含まれています。

次のうち、x86_64プロセッサのポインタ変数の正しいメモリアドレスは何ですか?

  • 0x7ffffff3328
  • 0x0
  • 0x8043844
  • 0x555555ab3b

検索中にx86_64仮想メモリアドレスの長さが48ビットであることがわかりました。しかし、これは私を混乱させます。可能な答えのどれも48ビットアドレスを表示しません。アドレスの終わりがゼロで埋められると仮定できますか?

すべてのアドレスが有効な48ビットアドレスであると仮定すると、0x0と0x8043844を削除できます。 0x0 はヌルポインタで、0x8043844 はカーネル空間のアドレスである必要があるからです。これで0x7ffffff3328と0x555555ab3bだけが残りました。 kernel.orgを確認すると、0x0000000000000000から0x00007fffffffffffが有効なユーザー空間アドレスであることがわかります(https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt)。

私が何を見逃しているのかよくわかりません。ゼロで埋められたアドレスパディングの私の仮定は正しいですか?どの住所が正解で、なぜですか?

どんな助けでも本当に感謝します:)

ベストアンサー1

おすすめ記事