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の理解については、この記事を参照してください
編集1:クラス名が不適切な名前だったため、クラス名をMyInstanceからMyClassに変更しました。心からお詫び申し上げます
EDIT2:クラスメンバーの変数番号を非静的から静的に変更しました