64位机器上的c++指针

c++ pointer on 64 bit machine

本文关键字:c++ 指针 机器 64位      更新时间:2023-10-16

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

int i;
cout << &i << endl;
output: 0x7fff44a09a7c

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

谢谢。

在大多数c++实现中,地址的打印会抑制前导零,以使内容更具可读性。像0x00000000000013fd这样的东西并没有真正增加价值。

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

它们在那里-它们没有去任何地方-这只是流中的格式。它会跳过前导零(查看stream的fill和width属性)。

编辑:在第二个想法,我不认为有一个很好的方式来改变默认的operator<<指针的格式。如果您使用std::hex操纵器输出,则可以更改填充和宽度属性。

为了好玩,您可以使用C输出,看看它是否更像您所追求的:

printf("0x%p");