В C я знаю, что могу динамически выделять двумерный массив в куче, используя следующий код:
int** someNumbers = malloc(arrayRows*sizeof(int*));
for (i = 0; i < arrayRows; i++) {
someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
Ясно, что это фактически создает одномерный массив указателей на кучу отдельных одномерных массивов целых чисел, а "Система" может понять, что я имею в виду, когда я прошу:
someNumbers[4][2];
Но когда я статически объявляю 2D-массив, как в следующей строке...:
int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
... создает ли подобную структуру в стеке, или это полностью другая форма? (т.е. является ли это 1D массивом указателей? Если нет, что это такое и как ссылки на него выясняются?)
Кроме того, когда я сказал "Система", что на самом деле отвечает за это? Ядро? Или компилятор C сортирует его при компиляции?