Q1。在Java中,所有的对象、数组和类变量都存储在堆上?C++ 也一样吗?数据段是堆的一部分吗?
那么下面的 C++ 代码呢?
class MyClass{
private:
static int counter;
static int number;
};
MyClass::number = 100;
Q2。据我了解,编译器赋予特定值的变量存储在数据段中,未初始化的全局和静态变量存储在 BSS(由符号启动的块)中。在这种情况下,静态的 MyClass::counter 被编译器初始化为零,因此它存储在 BSS 中,初始化为 100 的 MyClass::number 存储在数据段中。我的结论正确吗?
Q3。考虑以下代码:
void doHello(MyClass &localObj){
// 3.1 localObj is a reference parameter, where will this get stored in Heap or Stack?
// do something
}
void doHelloAgain(MyClass localObj){
// 3.2 localObj is a parameter, where will this get stored in Heap or Stack?
// do something
}
int main(){
MyClass *a = new MyClass(); // stored in heap
MyClass localObj;
// 3.3 Where is this stored in heap or stack?
doHello(localObj);
doHelloAgain(localObj);
}
我希望我已经把我的问题告诉了所有人
编辑:
关于BSS的一些了解请参考这篇文章
EDIT1:将类名从 MyInstance 更改为 MyClass,因为它是一个糟糕的名字。真诚的歉意
EDIT2:将类成员变量编号从非静态更改为静态