Для генерации кода измерением массива является fixed-size или variable-size. Если генератор кода может определить размер размерности и что размер размерности не изменяется, то размерность является фиксированным размером. Когда все размерности массива являются фиксированным размером, массив является массивом fixed-size. В следующем примере Z
является массивом фиксированного размера.
function Z = myfcn() Z = zeros(1,4); end
Размер первой размерности равняется 1, и размер второго измерения равняется 4.
Если генератор кода не может определить размер размерности, или генератор кода решает, что размер изменяется, то размерность является переменным размером. Когда по крайней мере одна из его размерностей является переменным размером, массив является массивом variable-size.
Размерностью переменного размера является или bounded или unbounded. Ограниченная размерность имеет фиксированный верхний размер. Неограниченная размерность не имеет фиксированного верхнего размера.
В следующем примере второе измерение Z
ограничено, переменный размер. Это имеет верхнюю границу 16.
function s = myfcn(n) if (n > 0) Z = zeros(1,4); else Z = zeros(1,16); end s = length(Z);
В следующем примере, если значение n
неизвестно во время компиляции, то второе измерение Z
неограниченно.
function s = myfcn(n) Z = rand(1,n); s = sum(Z); end
Можно задать массивы переменного размера:
Используя конструкторов, таких как zeros
, с непостоянной размерностью
Присвоение нескольких, постоянных размеров к той же переменной перед использованием его
Объявление, что все экземпляры переменной переменный размер при помощи coder.varsize
Для получения дополнительной информации смотрите, Задают Данные Переменного Размера для Генерации кода.
Можно управлять, позволены ли массивы переменного размера для генерации кода. Смотрите Включение и Отключение Поддержки Массивов Переменного Размера.
Для массивов фиксированного размера и массивов переменного размера, размер которых является меньше, чем порог, генератор кода выделяет память статически на стеке. Для неограниченного, массивов переменного размера и массивов переменного размера, размер которых больше, чем или равен порогу, генератор кода выделяет память динамически на куче.
Можно управлять, позволено ли динамическое выделение памяти или когда оно используется для генерации кода. Смотрите Выделение Управляющей памяти для Массивов Переменного Размера.
Генератор кода представляет динамически выделенные данные как тип структуры под названием emxArray
. Генератор кода генерирует служебные функции, которые создают и взаимодействуют с emxArrays. Если вы используете Embedded Coder®, можно настроить сгенерированные идентификаторы для типов emxArray
и служебных функций. Смотрите Управление форматом Идентификатора (Embedded Coder).
По умолчанию поддержка массивов переменного размера включена. Изменить эту поддержку:
В объекте настройки кода, установленном параметр EnableVariableSizing
на true
или false
.
В приложении MATLAB® Coder™, в настройках Memory, выборе или снимают флажок Enable variable-sizing.
Можно сказать, является ли массив фиксированным размером или переменным размером путем рассмотрения столбца Size вкладки Variables в отчете генерации кода.
Двоеточие (:) указывает, что размерность является переменным размером. Вопросительный знак (?) указывает, что размер неограничен. Например, размер 1 на:? указывает, что размер первой размерности является фиксированным размером 1, и размер второго измерения неограничен, переменный размер. Курсив указывает, что генератор кода произвел массив переменного размера, но размер массива не изменяется во время выполнения.