Реферат: Распределение памяти

Метод заключается в обобщении первого метода, предложенного для

двумерного случая; он также применим и для одномерного массива.

Подмассив A[i,*, ..., *] содержит последовательность

A[L1,*, ..., *], A[L1+1,*, ..., *], и т.д. до A[U1,*, ..., *].

Внутри подмассива A[i,*, ..., *] находятся подмассивы

A[i,L2,*, ..., *], A[i,L2+1,*, ..., *], ... и A[i,U2,*, ..., *].

Это повторяется для каждого измерения. Так, если мы продвигаемся

в порядке возрастания по элементам массива, быстрее изменяются

последние индексы:

┌───────────────────────────────────────┐ ┌─────────┐ ┌───────┐

│ подмассив A[L1] │ │ A[L1+1] │ │ A[U1] │

│ ┌────────┐ ┌──────────┐ ┌────────┐│ │ │ │ │

│ │A[L1,L2]│ │A[L1,L2+1]│ ... │A[L1,U2]││ │ │ ... │ │

│ └────────┘ └──────────┘ └────────┘│ │ │ │ │

└───────────────────────────────────────┘ └─────────┘ └───────┘

Вопрос заключается в том, как обратиться к элементу

A[i,j,k, ..., l,m]. Обозначим

d1 = U1-L1+1, d2 = U2-L2+1, ..., dn = Un-Ln+1.

То есть d1 есть число различных значений индексов в i-том

измерении. Следуя логике двумерного случая, мы находим начало

подмассива A[i,*, ..., *]

BASELOC + (i-L1)*d2*d3*...*dn

Где BASELOC - адрес первого элемента A[L1,L2,...,Ln], а

d2*d3*...*dn - размер каждого подмассива A[i,*,...,*]. Начало

подмассива A[i,j,*,...,*] находится затем добавлением

(j-L2)*d3*...*dn к полученному значению.

Действуя дальше таким же образом, мы окончательно получим:

BASELOC + (i-L1)*d2*d3*...*dn + (j-L2)*d3*...*dn

+ (k-L3)*d4*...*dn + ... + (i - Ln-1)*dn + m - Ln

К-во Просмотров: 806
Бесплатно скачать Реферат: Распределение памяти