问题是我自己在实验中遇到的,在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位。