1

私が書くとき:

int a;
int c;

また

int a, c;
  • aとがメモリ内の隣接するc場所に格納されるのはいつですか? (に等しい?)(&a+1)&c
  • それらを定義する方法はこれに影響を与えますか? それともマシンに依存するだけですか?
4

3 に答える 3

3

いいえ、 とがメモリ内の隣接する場所にあるaとは保証できませんが、通常はそうです。スタックは通常下向きに成長するため、通常は等しいとc思います。 &a - 1&c

連続した変数が必要な場合は、配列を使用します。

それらを定義する方法はこれに影響を与えますか?

通常、必要でない限り、コンパイラは並べ替えを行いません。たとえば、特定のアライメントを満たすため、またはパフォーマンス上の理由からです。


また、Mystial が言うように、コンパイラは変数を最適化して除外し、変数がメモリにまったく存在しないようにすることがあります。

于 2012-12-18T09:32:23.517 に答える
1

コンパイラは、必要な場所に自由に配置できます。それらがどこに配置されるかを保証する方法はありません。それらを隣接させる必要がある場合は、それらを 2 つの要素を持つ配列として宣言できます。

于 2012-12-18T09:33:13.137 に答える
1

aどちらの場合も、intとc隣接して格納する必要はありません。C標準では、そのようなことは義務付けられていません。

そんなことを観察しても何の役にも立たないし、何の役にも立たない。

于 2012-12-18T09:33:55.953 に答える