![试题 - 64 位虚拟内存 - 指针变量的正确地址](https://linux22.com/image/216170/%E8%AF%95%E9%A2%98%20-%2064%20%E4%BD%8D%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98%20-%20%E6%8C%87%E9%92%88%E5%8F%98%E9%87%8F%E7%9A%84%E6%AD%A3%E7%A1%AE%E5%9C%B0%E5%9D%80.png)
模拟考试中存在以下问题:
以下哪个地址是 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)。
我真的不确定我错过了什么。我对地址填充零的假设是否正确?哪个地址是正确答案,为什么?
我真的很感激任何帮助:)