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