私が書くとき:
int a;
int c;
また
int a, c;
a
とがメモリ内の隣接するc
場所に格納されるのはいつですか? (に等しい?)(&a+1)
&c
- それらを定義する方法はこれに影響を与えますか? それともマシンに依存するだけですか?
私が書くとき:
int a;
int c;
また
int a, c;
a
とがメモリ内の隣接するc
場所に格納されるのはいつですか? (に等しい?)(&a+1)
&c
いいえ、 とがメモリ内の隣接する場所にあるa
とは保証できませんが、通常はそうです。スタックは通常下向きに成長するため、通常は等しいとc
思います。 &a - 1
&c
連続した変数が必要な場合は、配列を使用します。
それらを定義する方法はこれに影響を与えますか?
通常、必要でない限り、コンパイラは並べ替えを行いません。たとえば、特定のアライメントを満たすため、またはパフォーマンス上の理由からです。
また、Mystial が言うように、コンパイラは変数を最適化して除外し、変数がメモリにまったく存在しないようにすることがあります。
コンパイラは、必要な場所に自由に配置できます。それらがどこに配置されるかを保証する方法はありません。それらを隣接させる必要がある場合は、それらを 2 つの要素を持つ配列として宣言できます。
a
どちらの場合も、intとc
隣接して格納する必要はありません。C標準では、そのようなことは義務付けられていません。
そんなことを観察しても何の役にも立たないし、何の役にも立たない。