Для генерации кода измерение массива имеет фиксированный или переменный размер. Если генератор кода может определить размер размера и размер размера не изменяется, то размер является фиксированным. Когда все размеры массива имеют фиксированный размер, массив является массивом фиксированного размера. В следующем примере: Z является массивом фиксированного размера.
function Z = myfcn() Z = zeros(1,4); end
Размер первого размера равен 1, а размер второго размера равен 4.
Если генератор кода не может определить размер размера, или генератор кода определяет, что размер изменяется, то размер является переменным размером. Если хотя бы одно из его измерений имеет переменный размер, массив является массивом переменного размера.
Размер переменного размера ограничен или не ограничен. Ограниченный размер имеет фиксированный верхний размер. Неограниченный размер не имеет фиксированного верхнего размера.
В следующем примере второй размер 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
Дополнительные сведения см. в разделе Определение данных переменного размера для создания кода.
Можно определить, разрешены ли массивы переменного размера для создания кода. См. раздел Включение и отключение поддержки массивов переменного размера.
Для массивов фиксированного размера и массивов переменного размера, размер которых меньше порогового значения, генератор кода статически распределяет память в стеке. Для неограниченных массивов переменного размера и массивов переменного размера, размер которых больше или равен порогу, генератор кода динамически выделяет память в куче.
Для функционального блока MATLAB нельзя использовать динамическое выделение памяти для:
Входные и выходные сигналы. Входные и выходные сигналы переменного размера должны иметь верхнюю границу.
Параметры или глобальные переменные. Параметры и глобальные переменные должны быть фиксированного размера.
Поля массивов шин. Массивы шин не могут иметь поля переменного размера.
Можно определить, разрешено ли динамическое выделение памяти или оно используется для создания кода. См. раздел Управление распределением памяти для массивов переменного размера в функциональном блоке MATLAB.
Генератор кода представляет динамически распределенные данные как структурный тип с именем emxArray. Генератор кода генерирует служебные функции, которые создают и взаимодействуют с emxArrays. При использовании Embedded Coder ® можно настроить сгенерированные идентификаторы для emxArray типы и служебные функции. См. раздел Управление форматом идентификатора (встроенный кодер).
По умолчанию для функциональных блоков MATLAB включена поддержка массивов переменного размера. Чтобы отключить эту поддержку:
В редакторе функциональных блоков MATLAB выберите «Редактировать данные».
Снимите флажок Поддерживать массивы переменного размера.
Можно определить, является массив фиксированным размером или переменным размером, посмотрев на столбец Размер (Size) вкладки Переменные (Variables) в отчете о функциях MATLAB.

Двоеточие (:) указывает, что размер имеет переменный размер. Знак вопроса (?) указывает, что размер неограничен. Например, размер 1-по-:? указывает, что размер первого измерения фиксированный размер 1, а размер второго измерения неограниченный переменный размер. Курсив указывает, что код указывает, что массив имеет переменный размер, но генератор кода определил, что он не изменяет размер.
