Элементы массива могут храниться в размещении основного столбца или размещении основной строки. Для массива, хранящегося в размещении основного столбца, элементы столбцов смежны в памяти. В основных размещениях элементы строк смежны. Размещение массива также называется порядком, форматом и представлением. Порядок хранения элементов может быть важным для интегрирования, удобства использования и эффективности. Некоторые алгоритмы лучше работают с данными, хранящимися в конкретном порядке.
Языки и окружения программирования обычно предполагают одно размещение массива для всех данных. MATLAB® и по умолчанию Фортран использует размещение основной столбца, в то время как C и C++ используют размещение основной строки. С помощью MATLAB Coder™ можно сгенерировать код C/C + +, который использует размещение основной строки или размещение основной столбца. См. «Генерация кода, который использует размещение массива Row-Major».
Память компьютера хранит данные в терминах одномерных массивов. Для примера, когда вы объявляете матрицу 3 на 3, программное обеспечение хранит эту матрицу как одномерный массив с девятью элементами. По умолчанию MATLAB хранит эти элементы с размещением массива основного столбца. Элементы каждого столбца смежны в памяти.
Рассмотрим матрицу A
:
A = 1 2 3 4 5 6 7 8 9
Матрица A
представлен в памяти по умолчанию с таким расположением:
1 4 7 2 5 8 3 6 9
В размещении массива с основной строкой язык программирования сохраняет элементы строк непрерывно в памяти. В размещении с основной строкой элементы массива хранятся как:
1 2 3 4 5 6 7 8 9
N-мерные массивы также могут храниться в основном или строковом размещении. В размещении с основным столбцом элементы из первого (крайнего левого) размерности или индекса смежны в памяти. В основной строке элементы из последней (самой правой) размерности или индекса смежны.
Когда вы смешиваете основные данные строк и основные данные столбцов в том же коде, необходимы преобразования размещения массива. Для примера можно сгенерировать код, который включает специализацию основной строки и основной функции столбца. Функциональные специализации используют один тип размещения массива для всех входных, выходных и внутренних данных. При передаче данных между функциями генератор кода автоматически вставляет преобразования размещения массива по мере необходимости. Входные и выходные данные в сгенерированные MEX-функции также преобразуются по мере необходимости.
Для двумерных данных операции транспонирования преобразуют данные между размещением основной строки и размещением основной столбца. Рассмотрим транспонированную версию A
:
A' = 1 4 7 2 5 8 3 6 9
Основным размещением столбца A'
соответствует основное размещение строк A
. (Для комплексных чисел в преобразованиях размещения массива используется несопряженная транспозиция.)
coder.columnMajor
| coder.isColumnMajor
| coder.isRowMajor
| coder.rowMajor