
模擬試験には次の問題が含まれています。
次のうち、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)。
私が何を見逃しているのかよくわかりません。ゼロで埋められたアドレスパディングの私の仮定は正しいですか?どの住所が正解で、なぜですか?
どんな助けでも本当に感謝します:)