【发布时间】:2014-05-22 08:41:16
【问题描述】:
我正在学习 c++,想知道这样的程序是如何在主内存中组织的。我知道有一个堆栈(带有堆栈帧)和一个堆。而且我知道动态分配某些东西会在堆上分配它。这是由malloc 或new 等运算符完成的。但是我在这个小的 c++ 程序中看不到它们。
该程序由一个主类和一个名为MyClass 的类组成。这个类有:
- 一个构造函数
- 一个成员变量 (
int) - 一个成员函数
主类为 Myclass 定义了一个对象,同时也定义了一个指向该对象的指针。
所以 - 所有这些在内存中是如何组织的?
#include <iostream>
using namespace std;
class MyClass {
int i;
public:
MyClass(int n) {
i = n;
}
int get_nmbr() {
return this->i;
}
};
int main() {
MyClass myClass(100), *p;
cout << myClass.get_nmbr() << endl;
p = &myClass;
cout << p;
return 0;
}
【问题讨论】:
-
这在很大程度上取决于您的实现和架构。从 C++ 本身的 pov 来看,实现的方式并不重要。
-
您看不到
malloc或new,因为程序中的所有内容要么放在寄存器中,要么放在堆栈中。顾名思义,stack就像一堆书,遇到的每一件事都堆在上面,必须先删除。您可以预期类似:100 加载到寄存器中,myClass被认为处于“最低”堆栈位置,然后p,myClass的地址放入寄存器,MyClass()调用构造函数(返回地址推送到堆栈) ,从寄存器中取出this,将100写入this->i(堆栈),弹出返回地址,推送寄存器,调用operator<<(ostream, int)....
标签: c++ memory heap-memory stack-memory