我在64位linux下使用c ++,编译器(g ++)也是64位.当我打印某个变量的地址,例如一个整数时,它应该打印一个64位整数,但实际上它打印一个48位整数.
int i;
cout << &i << endl;
output: 0x7fff44a09a7c
Run Code Online (Sandbox Code Playgroud)
我想知道其他两个字节在哪里.期待你的帮助.
谢谢.
在大多数C++实现中打印地址会抑制前导零以使事物更具可读性.东西就像0x00000000000013fd没有真正增加价值.
当你想知道为什么你通常不会在用户空间中看到超过48位的值时,这是因为当前的AMD64架构被定义为具有48位的虚拟地址空间(例如cat /proc/cpuinfo在linux上可以看到)