Документ взят из кэша поисковой машины. Адрес оригинального документа : http://sp.cs.msu.ru/dvm/dvmhtm1107/rus/sys/libdvm/rtsIDr2.html
Дата изменения: Mon Feb 13 12:59:42 2006
Дата индексирования: Mon Oct 1 23:24:00 2012
Кодировка: Windows-1251
Библиотека Lib-DVM. Описание интерфейса. Часть 2 (6-7)
Lib-DVM - описание интерфейса (оглавление) Часть1
(1-5)
Часть 2
(6-7)
Часть 3
(8-11)
Часть 4
(12-13)
Часть 5
(14-15)
Часть 6
(16-18)
Часть 7
(19)
создан: февраль, 2001 - последнее обновление 03.05.01 -

6 Создание и уничтожение распределенного массива

6.1 Создание распределенного массива

long crtda_ ( long
long
void
long
long
long
long
long
long
long
ArrayHeader[],
*ExtHdrSignPtr,
*BasePtr,
*RankPtr,
*TypeSizePtr,
SizeArray[],
*StaticSignPtr,
*ReDistrParPtr,
LowShdWidthArray[],
HiShdWidthArray[] );
     
ArrayHeader - заголовок создаваемого массива.
*ExtHdrSignPtr - признак расширенного заголовка.
BasePtr - базовый указатель для доступа к элементам распределенного массива.
*RankPtr - размерность создаваемого массива.
*TypeSizePtr - размер в байтах одного элемента массива.
SizeArray - массив, i-й элемент которого содержит размер создаваемого массива по измерению i+1 (0 <= i <= *RankPtr - 1).
*StaticSignPtr - признак создания статического массива.
*ReDistrParPtr - параметр, определяющий допустимость задания массива в качестве аргумента функций redis_ и realn_ (см. п.п.5.2 и 7.3).
LowShdWidthArray - массив, i-й элемент которого содержит ширину нижней границы (i+1)-го измерения распределенного массива.
HiShdWidthArray - массив, i-й элемент которого содержит ширину верхней границы (i+1)-го измерения распределенного массива.

Создание распределенного массива с помощью функции crtda_ означает лишь инициализацию системных структур, описывающих массив. Выделение памяти для элементов распределенного массива производится только после задания его отображения на абстрактную машину с помощью функции align_ (вычисления для каждого процессора, на который отображена абстрактная машина, локальной части массива в соответствии с его распределением, см. п.7.1). Доступ к элементам массива производится через функции системы поддержки (см. п.13).

Заголовок создаваемого распределенного массива представляет собой массив из *RankPtr+1 (при *ExtHdrSignPtr = 0) или *RankPtr*2+2 (при *ExtHdrSignPtr = 1) элементов типа "long". Его размещение в памяти (статическое или динамическое) должна произвести пользовательская программа. Инициализация заголовка распределенного массива осуществляется системой поддержки. Его основное назначение - обеспечить эффективный доступ к элементам локальной части распределенного массива.

Базовый указатель BasePtr должен ссылаться на любую переменную, имеющую тот же тип, что и тип элементов распределенного массива. Содержимое этой переменной несущественно, т.к. базовый указатель используется только для доступа к элементам локальной части распределенного массива.

Структура заголовка распределенного массива и его использование (совместно с базовым указателем) для доступа к локальной части массива рассмотрены в п. 13.4.

Задаваемый ненулевым значением *StaticSignPtr признак статического массив а означает создание массива, не уничтожаемого при выходе из программного блока (см.п.8). Такой массив может быть уничтожен только явно, с помощью рассмотренной ниже функции delda_.

Параметр *ReDistrParPtr может принимать значения:

0 - массив не может быть аргументом функции redis_ и не может перераспределяться функцией realn_;
1 - массив может быть аргументом функции redis_, но не может перераспределяться функцией realn_;
2 - расположение массива может быть изменено функцией realn_, но его использование для задания представления абстрактной машины в функции redis_ не допускается;
3 - массив может использоваться в качестве ссылки на представление абстрактной машины в функции redis_ и может быть перераспределен функцией realn_.

Число параметров (ширины нижних и верхних границ), задаваемых в массивах LowShdWidthArray и HiShdWidthArray, должно быть равно размерности распределенного массива. Вопрос о границах локальных частей распределенных массивов рассмотрен в п.12. Здесь же отметим, что ширина границы может быть задана равной нулю.

Функция возвращает нулевое значение.

6.2 Уничтожение распределенного массива

long delda_(long ArrayHeader[]);

ArrayHeader - заголовок уничтожаемого массива.

Функция уничтожает созданный функцией crtda_ распределенный массив. После уничтожения распределенного массива его заголовок может использоваться по усмотрению пользовательской программы.

Распределенный массив может быть уничтожен функцией delda_ только в том случае, если он был создан в текущей подзадаче и в текущем программном блоке (или его подблоке) (см. п. 8 и п. 10). Вместе с массивом будут уничтожены все группы границ, в которые он включен (см. п. 12).

Распределенный массив может быть уничтожен также с помощью функции delobj_ (см. п.17.5).

Возвращается нулевое значение.

6.3 Создание дополнительного заголовка распределенного массива

long addhdr_ ( long
long
NewArrayHeader[],
ArrayHeader[] );
     
NewArrayHeader - создаваемый заголовок.
ArrayHeader - один из существующих заголовков.

Функция создает заголовок распределенного массива, который в дальнейшем может использоваться равноправно с уже существующими заголовками. Его можно использовать, в частности, для создания других дополнительных заголовков.

При задании расположения распределенного массива (выравнивании) с помощью функций align_ и malign_ (см.п.7) инициализируются все его заголовки. Изменение расположения массива функциями realn_, mrealn_, redis_ и mredis_ (см. п.п. 5 и 7) также влечет изменение содержимого всех его заголовков.

Возвращается нулевое значение.

6.4 Уничтожение заголовка распределенного массива

long delhdr_(long ArrayHeader[]);

ArrayHeader - уничтожаемый заголовок распределенного массива.

Функция уничтожает заголовок, созданный функцией addhdr_ или заданный при обращении к функции crtda_. Нельзя уничтожить единственный заголовок распределенного массива.

Возвращается нулевое значение.

7 Отображение распределенного массива

7.1 Задание расположения (выравнивание) распределенного массива

long align_ ( long
PatternRef
long
long
long
ArrayHeader[],
*PatternRefPtr,
AxisArray[],
CoeffArray[],
ConstArray[] );
     
ArrayHeader - заголовок выравниваемого распределенного массива.
*PatternRefPtr - ссылка на образец выравнивания.
AxisArray - массив, j-й элемент которого содержит номер индексной переменной (номер измерения) распределенного массива для линейного правила выравнивания (j+1)-го измерения образца.
CoeffArray - массив, j-й элемент которого содержит коэффициент для индексной переменной распределенного массива в линейном правиле выравнивания (j+1)-го измерения образца.
ConstArray - массив, j-й элемент которого содержит константу линейного правила выравнивания для (j+1)-го измерения образца.

Функция align_ задает расположение указанного распределенного массива в пространстве указанного представления родительской абстрактной машины (выравнивает распределенный массив). При этом элементы массива распределяются между дочерними абстрактными машинами, которые входят в состав этого представления. Представление абстрактной машины определяется образцом, который может быть как самим представлением, так и, при косвенном отображении, распределенным массивом. В последнем случае ссылкой на образец является первое слово заголовка распределенного массива.

Использование в качестве образца распределенного массива допустимо лишь в том случае, если он уже отображен на некоторое представление абстрактной машины, а представления абстрактной машины - если оно уже отображено на некоторую процессорную подсистему. Поэтому выполнение функции align_ сводится к распределению элементов выравниваемого массива между процессорами, входящими в состав этой процессорной системы.

Образец выравнивания может быть отображен (в конечном результате) только в текущую процессорную систему или ее подсистему.

Нельзя отобразить уже отображенный распределенный массив.

Рассмотрим отображение распределенного массива детальнее. Пусть F - многозначная функция, определенная на индексном пространстве выравниваемого массива и принимающая значения в индексном пространстве образца:

F( (I1, ... , Ii, ... , In) ) = F1(I1, ... , Ii, ... , In) x
. . . . . . . . . . . . .. .
F
j(I1, ... , Ii, ... , In) x
. . . . . . . . . . . . .. .

Fm(I1, ... , Ii, ... , In)

где:

x - символ декартова произведения множеств;
n - размерность распределенного массива;
m - размерность образца;
Ii - индексная переменная i-го измерения выравниваемого массива;
Fj - многозначная функция, принимающая значения во множестве значений индексной переменной j-го измерения образца.

Выравнивание распределенного массива по заданному образцу - это указание системе поддержки (посредством задания функции F) о том, что элемент выравниваемого массива, определенный индексным вектором (i1, ... , in), должен быть размещен на тех и только тех процессорах, на которых размещен (или на которые отображен) хотя бы один из элементов образца, определенных множеством F((i1, ... , in)) (т.е. множеством-образом, элементами которого являются векторы индексного пространства образца).

Функции F1, ... , Fm называются координатными правилами выравнивания. Система поддержки обеспечивает следующие правила выравнивания.

1. Fj(I1, ... , In) = {Aj*Ik + Bj} , где:

k=f(j) - номер измерения выравниваемого массива (1 <= k <= n, f(j1) # f(j2) при j1 # j2);
Aj - целое число;
Bj - целое неотрицательное число.

В этом случае образом элемента (i1, ... , in) индексного пространства выравниваемого массива является множество, содержащее один элемент - Aj*Ik + Bj, принадлежащий множеству значений индексной переменной j-го измерения образца.

Aj и Bj должны удовлетворять условиям:
0 <= Bj <= MAXj и 0 <= Aj*MAXk + Bj <= MAXj, где:

MAXj - максимальное значение индексной переменной j-го измерения образца;
MAXk - максимальное значение индексной переменной k-го измерения выравниваемого массива.

2. Fj(I1, ... , In) = {q О Mj: 0 <= q <= MAXj} , где:

Mj - множество значений индексной переменной j-го измерения образца;
MAXj - максимальное значение индексной переменной j-го измерения образца.

В этом случае образом любого элемента (i1, ... , in) индексного пространства выравниваемого массива является все множество значений индексной переменной j-го измерения образца (в подобных случаях принято использовать символ "*" , т. е. "любой из допустимых").

Примеры.

  1. Выравнивание F((I1, I2)) = {I1} x {I2} означает, что элемент двухмерного массива должен быть отображен на те же процессоры, что и элемент двухмерного образца, если их индексы совпадают.
  2. Выравнивание F((I1, I2)) = {*} x {I1+5} x {*} означает, что элемент двухмерного массива будет отображен на те же процессоры, что и элемент трехмерного образца, если индекс по 2-му измерению образца на 5 больше индекса по 1-му измерению выравниваемого массива (вне зависимости от значения индекса выравниваемого массива по 2-му измерению и от значений индексов образца по 1-му и 3-му измерениям).
  3. Выравнивание F((I1, I2, I3)) = {*} x {*} означает, что каждый элемент трехмерного массива будет расположен на каждом процессоре, на который отображен хотя бы один элемент двухмерного образца (вне зависимости от значений индексов выравниваемого массива и образца).
  4. Выравнивание F((I1, I2)) = {0} x {1} x {2} означает, что каждый элемент двухмерного массива (вне зависимости от значений его индексов) будет размещен на тех процессорах, на которые отображен элемент трехмерного образца с индексами (0,1,2).

Определяя расположение массива в пространстве образца (т.е. задавая функции F1, ... , Fm), необходимо учитывать, что его элементы не должны выходить за пределы пространства образца. Соблюдение корректного отображения в каждом звене цепочки последовательных выравниваний обеспечит, в конечном результате, верное распределение элементов массива по процессорам.

Отметим, что если в качестве образца использован массив, то при его переотображении с помощью функции realn_ (см.п.7.3) массив, отображенный с помощью этого образца, сохранит прежнее расположение.

При обращении к функции align_ правило выравнивания Fj(I1, ... , In) = Aj*Ik + Bj для j-го измерения образца задается следующим образом:

AxisArray[j-1]
CoeffArray[j-1]
ConstArray[j-1]
содержит значение k;
содержит значение Aj;
содержит значение Bj.

Для задания правила Fj(I1, ... , In), значением которого для любых I1, ... , In является множество всех значений индексной переменной j-го измерения образца, значение AxisArray[j-1] (значение k) должно быть установлено равным -1. Значения CoeffArray[j-1] и ConstArray[j-1] (значения Aj и Bj) в этом случае несущественны.

Число правил выравнивания, заданных при обращении к функции align_, должно быть равно размерности образца.

Функция возвращает ненулевое значение, если отображенный массив имеет локальную часть на текущем процессоре, и нулевое - в противном случае.

Замечание 1. Заданное функции align_ отображение распределенного массива может быть выполнено лишь в том случае, если для любого процессора, на который отображен хотя бы один элемент массива, локальный размер каждого измерения массива, получаемый в результате отображения, не меньше ширин верхней и нижней границ этого измерения.

Замечание 2. При ненулевом значении параметра запуска системы поддержки DisArrayFill (файлы sysdebug.* базовых наборов параметров) отображенный распределенный массив будет расписан "нулевым" байтом, то есть байтом, каждый бит которого имеет нулевое значение). При нулевом значении параметра DisArrayFill содержимое отображенного массива считается неопределенным.

7.2 Суперпозиция выравниваний

Пусть функция G задает расположение n-мерного массива в пространстве r-мерного образца, а функция P - r-мерного массива в пространстве m-мерного образца:

G((I1, ... , Ii, ... , In)) = G1(I1, ... , Ii, ... , In) x
. . . . . . . . . . . . . . .
G
k(I1, ... , Ii, ... , In) x
. . . . . . . . . . . . . . .
G
r(I1, ... , Ii, ... , In)
   
P((J1, ... , Jj, ... , Jr)) = P1(J1, ... , Jj, ... , Jr) x
. . . . . . . . . . . . . . .
P
s(J1, ... , Jj, ... , Jr) x
. . . . . . . . . . . . . . .
P
m(J1, ... , Jj, ... , Jr)

Тогда осуществленное с помощью функции align_ выравнивание P r-мерного массива PatternDA в m-мерном пространстве образца Pattern с последующим выравниванием G n-мерного массива DA в r-мерном пространстве массива PatternDA является выравниванием F n-мерного массива DA в m-мерном пространстве образца Pattern, представляющим собой произведение (суперпозицию) отображений P и G:

Координатные правила выравнивания Fs (0 <= s <= m ) отображения F являются суперпозицией координатных правил выравнивания отображений P и G и могут быть записаны следующим образом.

1. Пусть Ps((J1, ... , Jr)) = { q О Ms: 0 <= q <= MAXs } , где:

MAXs - максимальное значение индексной переменной s-го измерения образца Pattern;
Ms - множество значений индексной переменной s-го измерения образца Pattern.

Тогда Fs((I1, ... , In)) = Ms, т.е. полное размножение массива DA по s-му измерению образца Pattern.

2. Пусть Ps((J1, ... , Jr)) = Cs*Jk + Ds и
Gk((I1, ... , In)) = Qk*Il + Rk ,

где:

Jk - индексная переменная k-го измерения массива PatternDA;
Il - индексная переменная l-го измерения массива DA;
Cs, Qs - целые числа;
Dk, Rk - целые неотрицательные числа.

Тогда Fs((I1, ... , In)) = As*Il + Bs , где As = Cs*Qk и Bs = Cs*Rk + Ds.

3. Пусть Ps((J1, ... , Jr)) = Cs*Jk + Ds и
Gk((I1, ... , In)) = { q О Mk: 0 <= q <= MAXk } ,

где:

Jk - индексная переменная k-го измерения массива PatternDA;
Cs - целое число;
Ds - целое неотрицательное число;
MAXk - максимальное значение индексной переменной k-го измерения массива PatternDA;
Mk - множество значений индексной переменной k-го измерения массива PatternDA.

Тогда

т.е. частичное, разреженное линейной функцией Ps, размножение массива DA по s-му измерению образца Pattern.

Описанное отображение F эквивалентно заменяет выравнивания P и G в цепочке последовательных выравниваний. В частности, если образец Pattern не является представлением абстрактной машины и, следовательно, выравнен по другому образцу некоторой функцией Q, то отображения F и Q могут быть заменены их суперпозицией Q*F. Таким образом, заменой последовательных выравниваний их суперпозицией может быть построено результирующее выравнивание массива DA по представлению абстрактной машины (что и осуществляется системой поддержки при выполнении функции align_ выравнивания массива DA по массиву PatternDA).

7.3 Изменение расположения распределенного массива

long realn_( long
PatternRef
long
long
long
long
ArrayHeader[],
*PatternRefPtr,
AxisArray[],
CoeffArray[],
ConstArray[],
*NewSignPtr );
     
ArrayHeader - заголовок заново выравниваемого распределенного массива.
*PatternRefPtr - ссылка на образец выравнивания.
AxisArray - массив, j-й элемент которого содержит номер индексной переменной (номер измерения) распределенного массива для линейного правила выравнивания (j+1)-го измерения образца.
CoeffArray - массив, j-й элемент которого содержит коэффициент для индексной переменной распределенного массива в линейном правиле выравнивания (j+1)-го измерения образца.
ConstArray - массив, j-й элемент которого содержит константу линейного правила выравнивания для (j+1)-го измерения образца.
*NewSignPtr - задаваемый единицей признак обновления содержимого распределенного массива.

Функция realn_ отменяет расположение, установленное ранее с помощью функции align_ (или malign_ , см.п.7.5) для распределенного массива с заголовком *ArrayHeaderPtr, и задает для этого массива новое расположение в соответствии с указанными при обращении к функции параметрами. Все распределенные массивы, при выравнивании которых рассматриваемый массив использовался в качестве образца, свое расположение сохранят.

Как переотображаемый распределенный массив, так и образец выравнивания на момент обращения к функции должны быть отображены в текущую процессорную систему или ее подсистему (возможно, каждый в свою).

Содержимое вновь выравненного массива, в зависимости от значения *NewSignPtr, будет:

При NewSignPtr = 1 перераспределенный массив будет, тем не менее, расписан "нулевым" байтом, если система поддержки была запущена с ненулевым значением параметра DisArrayFill (файлы sysdebug.* базовых наборов параметров).

При переотображении массива содержимое его границ (см. п. 12) не сохраняется.

Перераспределение массива с помощью функции realn_ возможно лишь в том случае, если при его создании функцией crtda_ значение ее параметра *ReDistrParPtr было задано равным 2 или 3 (см.п.6).

Распределенный массив, заданный при обращении к функции, может быть ранее не отображен. В этом случае функция realn_ выполняется как функция align_ , но при *NewSignPtr = 2 впервые отображенный массив будет расписан "нулевым" байтом. Значение параметра *ReDistrParPtr, с которым был создан распределенный массив, несущественно.

Функция возвращает ненулевое значение, если переотображенный массив имеет локальную часть на текущем процессоре, и нулевое - в противном случае.

7.4 Опрос карты отображения

ArrayMapRef arrmap_( long
long
ArrayHeader[],
*StaticSignPtr );
     
ArrayHeader - заголовок распределенного массива.
*StaticSignPtr - признак создания статической карты отображения.

Функция arrmap_ создает объект (карту отображения), описывающий текущее отображение распределенного массива на представление абстрактной машины, и возвращает ссылку на созданный объект.

Карта отображения распределенного массива содержит, в частности, следующую информацию:

Задаваемый ненулевым значением *StaticSignPtr признак статической карты отображения означает создание карты, не уничтожаемой при выходе из программного блока (см.п.8). Такая карта может быть уничтожена только явно, с помощью рассмотренной в п.7.7 функции delarm_.

7.5 Задание расположения распределенного массива по карте отображения

long malign_( long
AMViewRef
ArrayMapRef
ArrayHeader[],
*AMViewRefPtr,
*ArrayMapRefPtr );
     
ArrayHeader - заголовок распределенного массива.
*AMViewRefPtr - ссылка на представление абстрактной машины, являющееся образцом выравнивания.
*ArrayMapRefPtr - ссылка на карту отображения распределенного массива.

Функция malign_ задает отображение указанного распределенного массива на представление абстрактной машины по заданной карте отображения.

Размерность распределенного массива и размерность представления абстрактной машины должны быть равны соответствующим размерностям, содержащимся в карте отображения.

При равном NULL значении AMViewRefPtr или при нулевом значении *AMViewRefPtr образцом выравнивания будет представление абстрактной машины, ссылка на которое содержится в карте отображения.

Перед обращением к функции malign_ представление абстрактной машины (заданное ссылкой *AMViewRefPtr или в карте отображения) должно быть отображено в текущую процессорную систему или ее подсистему.

Нельзя отобразить уже отображенный распределенный массив.

Возвращается ненулевое значение, если отображенный массив имеет локальную часть на текущем процессоре, и нулевое - в противном случае.

Замечание. При ненулевом значении параметра запуска системы поддержки DisArrayFill (файлы sysdebug.* базовых наборов параметров) отображенный распределенный массив будет расписан "нулевым" байтом, то есть байтом, каждый бит которого имеет нулевое значение). При нулевом значении параметра DisArrayFill содержимое отображенного массива считается неопределенным.

7.6 Изменение расположения распределенного массива по карте отображения

long mrealn_( long
AMViewRef
ArrayMapRef
long
ArrayHeader[],
*AMViewRefPtr,
*ArrayMapRefPtr,
*NewSignPtr );
     
ArrayHeader - заголовок заново выравниваемого распределенного массива.
*AMViewRefPtr - ссылка на представление абстрактной машины, являющееся образцом выравнивания.
*ArrayMapRefPtr - ссылка на карту отображения распределенного массива.
*NewSignPtr - задаваемый единицей признак обновления содержимого распределенного массива.

Функция mrealn_ отменяет расположение, установленное ранее с помощью функции malign_ (или align_ , см.п.7.1) для распределенного массива с заголовком *ArrayHeaderPtr, и задает для этого массива новое расположение в соответствии с указанной при обращении к функции картой отображения. Все распределенные массивы, при выравнивании которых рассматриваемый массив использовался в качестве образца, свое расположение сохранят.

Размерность распределенного массива и размерность представления абстрактной машины должны быть равны соответствующим размерностям, содержащимся в карте отображения.

При равном NULL значении AMViewRefPtr или при нулевом значении *AMViewRefPtr образцом выравнивания будет представление абстрактной машины, ссылка на которое содержится в карте отображения.

Как переотображаемый распределенный массив, так и представление абстрактной машины (заданное ссылкой *AMViewRefPtr или в карте отображения) на момент обращения к функции должны быть отображены в текущую процессорную систему или ее подсистему (возможно, каждый в свою).

Содержимое вновь выравненного массива, в зависимости от значения *NewSignPtr, будет:

При NewSignPtr = 1 перераспределенный массив будет , тем не менее, расписан "нулевым" байтом, если система поддержки была запущена с ненулевым значением параметра DisArrayFill (файлы sysdebug.* базовых наборов параметров).

При переотображении массива содержимое его границ (см. п. 12) не сохраняется.

Перераспределение массива с помощью функции mrealn_ возможно лишь в том случае, если при его создании функцией crtda_ значение ее параметра *ReDistrParPtr было задано равным 2 или 3 (см.п.6).

Распределенный массив, заданный при обращении к функции, может быть ранее не отображен. В этом случае функция mrealn_ выполняется как функция malign_, но при *NewSignPtr = 2 впервые отображенный массив будет расписан "нулевым" байтом. Значение параметра *ReDistrParPtr, с которым был создан распределенный массив, несущественно.

Функция возвращает ненулевое значение, если переотображенный массив имеет локальную часть на текущем процессоре, и нулевое - в противном случае.

7.7 Уничтожение карты отображения

long delarm_(ArrayMapRef *ArrayMapRefPtr);

*ArrayMapRefPtr - ссылка на карту отображения распределенного массива.

Функция уничтожает созданную функцией arrmap_ карту отображения распределенного массива. После уничтожения карты отображения ссылка на нее может использоваться по усмотрению пользовательской программы.

Карта отображения может быть уничтожена функцией delarm_ только в том случае, если она была создана в текущей подзадаче и в текущем программном блоке (или его подблоке) (см. п. 8 и п. 10).

Карта отображения может быть уничтожена также с помощью функции delobj_ (см.п.17.5).

Возвращается нулевое значение.

Замечание. Одним из возможных применений функций выравнивания распределенного массива по карте отображения - сохранение и восстановление расположения массивов в процедурах, обрабатывающих внешние распределенные массивы с их перераспределением.

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

7.8 Опрос ссылки на представление абстрактной машины, в которое отображен заданный распределенный массив

AMViewRef getamv_ (long ArrayHeader[]);

ArrayHeader - заголовок распределенного массива.

Функция getamv_ возвращает ссылку на представление абстрактной машины, по которому выравнен распределенный массив, заданный заголовком ArrayHeader. Нулевое значение возвращенной ссылки означает, что заданный массив не отображен.


Lib-DVM - описание интерфейса (оглавление) Часть1
(1-5)
Часть 2
(6-7)
Часть 3
(8-11)
Часть 4
(12-13)
Часть 5
(14-15)
Часть 6
(16-18)
Часть 7
(19)