【发布时间】:2013-10-28 14:57:05
【问题描述】:
我正在 64 位机器上运行 C++ 程序。该程序从不同的类动态创建对象。当我使用 cout 打印出指向这些对象的指针的值(不是取消引用)时,一些对象的地址是 48 位,而其他对象的地址是 28 位!我读过一些处理器目前只支持 48 位,但为什么在某些情况下我会得到 28 位的输出?这到底是什么意思?!
编辑:
这是一个大项目的一部分。因此,我将无法发布确切的代码。但这就是基本上正在发生的事情。我确实意识到需要删除对象以避免内存泄漏。
ClassA *pA = new ClassA();
ClassB *pB = new ClassB();
cout << "Address of ClassA object = " << pA << " , Address of ClassB object = " << pB << endl;
pA = new ClassA();
pB = new ClassB();
cout << "Address of ClassA object = " << pA << " , Address of ClassB object = " << pB << endl;
现在我得到的输出如下:
ClassA 对象的地址 = 0x7fcda0001150 ,ClassB 对象的地址 = 0x19f1160
ClassA 对象的地址 = 0x26c77c0 ,ClassB 对象的地址 = 0x1aba400
【问题讨论】:
-
你能显示你的代码吗?听起来您没有将地址填充到适当的位数。
-
您是如何确定指针大小为 28 位的?
sizeof以字节为单位,所以它要么给你 24 位要么 32 位。 here 是关于为什么指针只有 48 位大小的线程。 -
@RetiredNinja 我用示例代码更新了问题。
-
@DanielSaska 输出格式中可能省略了前导零,它实际上是 32 位。但是我不明白的是输出的不一致。
-
问题解决了,你刚刚回答了你的问题......差不多。当我尝试使用
int指针时,我得到的是类似于 ClassA 对象的地址 = 0000002A902C8150 的东西。指针始终是 64 位的,但是当您以您所做的方式输出时,会省略前导零。有时你会得到指向内存的指针,这仍然很奇怪。