Как двумерный массив хранится в памяти?
Я подумал о следующем подходе, когда строки хранятся как непрерывные блоки памяти.
|_________||___< em>______|______ __|________|.. .|_________|
Доступ к элементам осуществляется как (i,j) -> n*i+j, где n — размер матрицы (предположим, что это nxn).
Но что, если я хочу добавить к нему новый столбец? Мне пришлось бы обновлять каждый (n+1)-й элемент в каждой строке, а также сдвигать их вправо, но это слишком затратно в вычислительном отношении.
Другой вариант — скопировать матрицу в новое место и обновить строки элементами нового столбца на лету. Но это тоже не слишком эффективно, если массив большой.
И, наконец, третий вариант, о котором я подумал, - выделить фиксированный объем памяти для каждой строки, и когда я добавляю новый столбец, мне не нужно сдвигать строки вправо.
У меня не может быть пробелов в памяти, поэтому все блоки должны быть смежными.
Я не прошу реализацию C с использованием указателей и фактической оперативной памяти, мне просто любопытен теоретический подход к хранению динамического 2D-массива в памяти, чтобы к нему было легко добавлять новые строки или столбцы. .
Есть ли другие более эффективные подходы?