我在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
答案 0 :(得分:1)
我猜,您刚刚观察到对象分配在不同的内存区域中:
系统如何真正布置内存完全取决于系统。有些系统可能具有完全不同的内存布局,堆栈向上增长等等。这是一个简单的程序,展示了这种效果:
#include <iostream>
int main()
{
static int a(0);
static int const b(0);
int c(0);
int* d(new int(0));
std::cout << "a=" << &a << '\n'
<< "b=" << &b << '\n'
<< "c=" << &c << '\n'
<< "d=" << d << '\n';
delete d;
}
在我的系统上,此程序打印
a=0x103504064
b=0x103503f7c
c=0x7fff5c6fca8c
d=0x7f92204000e0
我想,像这种差异这样的事情会让你假设指针不同,但只是格式化的值需要不同的数字位数:所有使用的int*
都具有相同的大小。