64位机器上的c++指针
c++ pointer on 64 bit machine
我在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");
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错