7

次の 2 次元の C スタイル配列を宣言すると、

int data[X][Y]

コンパイラがこれを次のような単一の配列として作成すると想定しています

int data[X*Y]しかし、これは保証されていますか?

簡単にするために、x86 アーキテクチャで標準のコンパイラを使用しているとします。今はどうですか

int data[X][Y][Z]?

コンパイラはこれをメモリの連続ブロックとして作成し、オフセットをいじるだけですか?

私は通常、オフセット行 * NumCols + col を持つ 2 次元配列に単一のベクトルを使用し、それを計算するインライン関数を持っていますが、この質問の 3 次元配列に興味がありました。また、誰かが単一のベクトルでこれを行ったかどうか、およびオフセット ロジックもどうなるかを尋ねる必要があります。

4

3 に答える 3

8

はい、C の任意の順序の多次元配列は連続しています。いわば、それらは単なる「配列の配列」です。comp.lang.c の FAQ のセクション 6 の Arrays and Pointers には、さらに多くの情報があります。

于 2013-10-23T17:21:59.770 に答える
6

結果の配列は、プロセスに割り当てられた仮想メモリ領域で連続します。配列は物理メモリ内で連続していない可能性がありますが、それは問題ではありません。

于 2013-10-23T17:22:14.420 に答える
2

配列内の要素は連続していることが保証されているため、どちらの場合もレイアウトは同じです。

于 2013-10-23T17:22:36.207 に答える