1

コード1:

int main(){
   int a=1;
   int b=2;
   cout << "&a: "<<&a << endl;
}

出力1:

&a: 0x22ff48

コード2:

int main(){
   int a=1;
   int b=2;
   cout << "&a: "<<&a << endl;
   cout << "&b: "<<&b << endl;
}

出力2:

&a: 0x22ff4c
&b: 0x22ff48


だから私の質問は、私がバリバールaのアドレスを印刷したときに、なぜバリバールのアドレスが変わったのbですか?

4

2 に答える 2

7

まったく使用しなかった場合b、コンパイラはおそらくそれを完全に削除したので、スペースを占有しませんでした。

bのアドレスを取得すると、コンパイラはそのアドレスにスペースを割り当てる必要がありました。

于 2012-12-07T21:17:35.633 に答える
5

とにかく、OSは次回、別の(仮想)ベースアドレスに実行可能イメージを自由にロードできます。

あなたが観察しているものはとにかく未定義です。重要なのは、変数が最適化されず、プログラムが再コンパイルされない場合でも、毎回異なる結果が得られる可能性があるということです。

OSを実装の一部として数える場合、実装で定義されている可能性があります

于 2012-12-07T21:19:26.270 に答える