1

C ++では、静的変数または非静的変数はどこにありますか?私は記憶の中で意味します。

および、静的変数または非静的変数はいつ初期化されますか?

誰かが私の考えを明確にするのを手伝ってくれる必要があります。ありがとうございました!

そしてCはどうですか?同じ?

4

3 に答える 3

11

コンパイラ(またはリンカやローダー)がメモリに配置したい場所ならどこにでも移動できますが、CおよびC++標準ではそのレベルの詳細は義務付けられていません。彼らは行動を義務付けるだけです。

通常、静的メンバーは、プログラムの起動時(コンパイル時に、すでに初期化された状態でロードされるようにすることを含む)、または最初に使用する直前に一度初期化されます。

于 2011-03-14T05:44:23.073 に答える
0

スタティックは、グローバルと同じ場所に配置されます。グローバルは、コンパイラによって決定される傾向があり、プログラムがロードされたときに作成され、プログラムが終了するまで持続します。

非静力学はどこにでも行きます-あなたがそれらを(スタックまたはヒープ上に)置くところはどこでも

于 2011-03-14T05:51:22.723 に答える
0

場所に存在する非静的メンバーは、オブジェクトがどのようにインスタンス化されるかによって異なります。

class foo
{
    int num ; // Non-Static member 
    // ....
};

foo obj ; // In this case `num` resides on stack. In fact, obj it self resides on stack
foo *temp = new foo;  // In this case `num` resides on heap or in memory location acquired from the free store.

静的メンバーについてはよくわかりません。

于 2011-03-14T05:46:54.337 に答える