64位机器上的c++指针

标签 c++ pointers

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

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

output: 0x7fff44a09a7c

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

谢谢。

最佳答案

大多数 C++ 实现中的地址打印会抑制前导零,以提高可读性。像 0x00000000000013fd 这样的东西并没有真正增加值(value)。

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

关于64位机器上的c++指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7190708/

相关文章:

c++ - cuda和c++问题

c++ - 如何通过 ref union 迭代 2 个 vector ?

c++ - 14 段显示和 Tesseract OCR with OpenCV

c - 从二维数组打印字符

c++ - 配置用 C++ 编写的现有应用程序

c++ - 重载C预处理程序宏-基于调用语法的区分

c - 在函数中使用 realloc() 调整 int 指针大小时出现问题

c++ - 以可变参数函数为参数的函数

c - 指向行长度不兼容的二维数组的指针

c++ - 我可以在指针类型的声明中省略 const 限定符吗?