Генерация кода для массивов Переменного Размера

Для генерации кода измерением массива является 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, и размер второго измерения неограничен, переменный размер. Курсив указывает, что генератор кода произвел массив переменного размера, но размер массива не изменяется во время выполнения.

Похожие темы