64位的系统,但是在调试时显示的地址为48位

问题是我自己在实验中遇到的,在https://www.zhihu.com/question/27265748/answer/35910945找到了答案,因为文字大部分来自该链接,故选择了转载,希望有天我可以自己思考后解决问题,加油。



实验过程中遇到一个疑问:就是我使用的是64位的系统,但是在调试时显示的地址为48位,如下图。通过查阅资料,可以知道:地址为48位是表象,出现这样结果的原因是x86_64处理器硬件限制。因为x86_64处理器地址线只有48条,故而导致硬件要求传入的地址48位到63位地址必须相同,若表示为16进制,则前4位为ffff或者是0000。也就是说有两段合法的地址空间:

0x00000000 0000 0000-0x0000 7fff ffff ffff

0xffff8000 0000 0000-0xffff ffff ffff ffff

由上可知,可表示的地址空间为2^48Byte=2^8TB=256TB,这就是当前处理器的寻址能力,又因为操作系统一般使用地段地址,故而一般只用到第一段地址空间,如果要用到第二段地址空间,则需要内存达到寻址空间的一般128TB。根据以上分析,下图即可知:0x7fff ffff da20完整的地址其实是0x0000 7fff ffff da20,为64位。


  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值