How are multi-dimensional arrays formatted in memory?

In C, I know I can dynamically allocate a two-dimensional array on the heap using the following code:

int** someNumbers = malloc(arrayRows*sizeof(int*));

for (i = 0; i < arrayRows; i++) {
    someNumbers[i] = malloc(arrayColumns*sizeof(int));
}

Clearly, this actually creates a one-dimensional array of pointers to a bunch of separate one-dimensional arrays of integers, and “The System” can figure out what I mean when I ask for:

someNumbers[4][2];

But when I statically declare a 2D array, as in the following line…:

int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];

…does a similar structure get created on the stack, or is it of another form completely? (i.e. is it a 1D array of pointers? If not, what is it, and how do references to it get figured out?)

Also, when I said, “The System,” what is actually responsible for figuring that out? The kernel? Or does the C compiler sort it out while compiling?

6 Answers
6

Leave a Comment