64位机器上的C++指针
问题描述:
我在64位linux下使用C++,编译器(g ++)也是64位。当我打印一些变量的地址,例如一个整数时,它应该打印一个64位整数,但实际上它会打印一个48位整数。64位机器上的C++指针
int i;
cout << &i << endl;
output: 0x7fff44a09a7c
我想知道另外两个字节在哪里。期待你的帮助。
谢谢。
答
在大多数C++实现中打印地址会抑制前导零以提高可读性。像0x00000000000013fd
这样的东西并没有真正增加价值。
当你想知道为什么在用户空间中通常看不到超过48位的值时,这是因为当前的AMD64体系结构被定义为具有48位的虚拟地址空间(如在Linux上可以看到cat /proc/cpuinfo
)
答
为了好玩,你可以使用C的输出,看看它更像是你后:
printf("0x%p");
多少位没有'数1'有哪些?你会抱怨'uint32_t x = 1;'没有足够的位?你应该检查'sizeof(* int)'而不是打印东西。 –