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