next up previous contents
След.: Оператор DATA Выше: Массивы Пред.: Упражнения   Содержание


Сплошные массивы

Концепция сплошности массива призвана улучшить оптимизацию кода. Массив сплошной, если его элементы занимают сплошную область памяти. Ясно, что если матрица хранится по столбцам, то два смежных столбца -- сплошной массив, а две строки -- нет. Не сплошна и секция, выбирающая четные элементы. Сплошность объекта может устанавливаться компилятором автоматически, а может указываться явно -- в этом случае запрещены операции, нарушающие сплошность.

Сплошной массив объявляется с атрибутом CONTIGUOUS. Применим к указателям на массив и массивам, перенимающим размер (см. параграф про процедуры) и означает, что указатель может указывать на массив (или массив перенимать конфигурацию фактического аргумента массива), который является сплошным. Объект считается сплошным, если он имеет этот атрибут; является цельным массивом (не секцией), не указателем и не перенимает конфигурацию; является массивом, перенимающим конфигурацию, который уже связан со сплошным аргументом; является размещенным (с помощью оператора ALLOCATE) массивом; является указателем, связанным со сплошным объектом; является секцией массива при условии, что сам массив сплошной, отсутствуют векторные индексы, элементы секции идут по порядку их следования в массиве, секция не является вещественной или мнимой частью массива комплексного типа, в случае строкового массива присутствуют все символы (то есть не выделяется подстрок или подстрока включает в себя все символы), в случае переменной производного типа ненулевой ранг имеет только последнее по вложенности поле (то есть собственно массивом является только поле, к полям которого обращение отсутствует). В стандарте описаны (очевидные) ситуации, когда объект не сплошной, в остальных случаях признание объекта сплошным отдается на усмотрение компилятора. Проверить, является ли объект сплошным, позволяет функция IS_CONTIGUOUS, принимающей массив любого типа (указатель должен быть связан с объектом, размещаемый массив -- размещен) и возвращающей логическое значение.



Ilya A. Chernov 2012-12-19
X