64位机器上的c ++指针

che*_*eng 8 c++ pointers

我在64位linux下使用c ++,编译器(g ++)也是64位.当我打印某个变量的地址,例如一个整数时,它应该打印一个64位整数,但实际上它打印一个48位整数.

int i;
cout << &i << endl;

output: 0x7fff44a09a7c
Run Code Online (Sandbox Code Playgroud)

我想知道其他两个字节在哪里.期待你的帮助.

谢谢.

Pla*_*aHH 8

在大多数C++实现中打印地址会抑制前导零以使事物更具可读性.东西就像0x00000000000013fd没有真正增加价值.

当你想知道为什么你通常不会在用户空间中看到超过48位的值时,这是因为当前的AMD64架构被定义为具有48位的虚拟地址空间(例如cat /proc/cpuinfo在linux上可以看到)