C では、次のコードを使用してヒープに 2 次元配列を動的に割り当てることができることを知っています。
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
明らかに、これは実際には一連の個別の 1 次元整数配列へのポインターの 1 次元配列を作成し、「システム」は私が要求したときに私が何を意味するかを理解できます。
someNumbers[4][2];
しかし、次の行のように、2D 配列を静的に宣言すると...:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
...同様の構造がスタック上に作成されますか、それとも完全に別の形式ですか? (つまり、ポインタの 1D 配列ですか?そうでない場合、それは何ですか?また、それへの参照はどのように理解されますか?)
また、私が「システム」と言ったとき、それを理解するのに実際に責任があるのは何ですか? カーネル?それとも、C コンパイラはコンパイル中にそれを整理しますか?