C++ 64 位计算机 ,显示 32 位堆地址
C++ 64 Bit machine , shows 32 Bit heap address
我在一台64位Linux机器上创建了一个示例C++程序,该机器在VMware Player上运行,而不是主机作为Windows。下面是一个类代码。
class operatorOverloadingTest{
private:
int age;
char *name;
public:
operatorOverloadingTest(int age){
this->age = age;
name = new char[10];
strncpy(name,"Indra",strlen("Indra"));
}
void displayDetails(){
cout<<"My Name :"<<name<<endl;
cout <<"My age: "<<age<<endl;
}
friend ostream & operator<<(ostream &out, const operatorOverloadingTest &myObj);
~operatorOverloadingTest(){
delete name;
cout<<" nDestructor getting called"<<endl;
}
};
In my Main function, created object of class:
1. By using new operator.
2. Stack Object.
int main(){
operatorOverloadingTest *oOT = new operatorOverloadingTest(10);
operatorOverloadingTest oOT1(30);
我知道,在 64 位机器上,内存地址以 8 字节表示。
当我使用 GDB 运行程序时,我看到以下地址:
p oOT
$1 = (operatorOverloadingTest *) 0x613c20
p &oOT
$2 = (operatorOverloadingTest **) 0x7fffffffe228
&(oOT1.age)
$7 = (int *) 0x7fffffffe210
(gdb) p &(oOT->age)
$8 = (int *) 0x613c20
我的问题是,为什么堆中分配的对象显示 32 位地址表示形式,而堆栈上的对象 (oOT1) 显示 64 位地址表示形式,而我的操作系统是 64 位?(使用 uname -a 检查)。
我的问题是,为什么堆中分配的对象显示 32 位地址表示形式,而堆栈上的对象 (oOT1) 显示 64 位地址表示形式
当您查看 0x1234
时,您知道该实体至少有 16 位,但您无法判断它是 16 位、32 位还是 64 位实体,因为 GDB 不会打印前导零。
如果您想知道某个程序实体有多大,请尝试:
(gdb) print sizeof(oOT)
(gdb) print sizeof(&ooT)
相关文章:
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 我编写了一个程序来显示数组的内容,但它显示的是它的地址
- 为什么我无法显示指针的地址?
- 可视C++消息框中函数的显示地址
- Eclipse 编译器有没有办法将变量中的地址字段显示为整数值?
- GDB 显示损坏的指令地址偏移量
- 如何显示在堆上创建的内存的地址
- 内存地址显示?C++
- C++ 64 位计算机 ,显示 32 位堆地址
- 如何禁用调试控制台在我的代码中显示文件地址
- 本地变量的地址不在smaps显示的堆栈地址范围内
- 更新:程序显示fstream的地址,而不是文本文件
- 终端中未显示内存地址(参考)
- 为什么 printf() 在指针中显示与 cout 不同的地址输出C++
- 显示 IPv6 地址
- FindFirstFile() 显示地址
- GDB:显示函数将我的 {type} 的地址打印为整数——想改成十六进制
- 什么是 dumpbin /import 显示的输入地址表和输入名称表
- GDBstrace显示它试图在一个无效地址ptrace
- c++字符数组不显示地址