exponenta event banner

Создание кода для массивов переменного размера

Для генерации кода измерение массива имеет фиксированный или переменный размер. Если генератор кода может определить размер размера и размер размера не изменяется, то размер является фиксированным. Когда все размеры массива имеют фиксированный размер, массив является массивом фиксированного размера. В следующем примере: 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

Дополнительные сведения см. в разделе Определение данных переменного размера для создания кода.

Можно определить, разрешены ли массивы переменного размера для создания кода. См. раздел Включение и отключение поддержки массивов переменного размера.

Выделение памяти для массивов переменного размера

Для массивов фиксированного размера и массивов переменного размера, размер которых меньше порогового значения, генератор кода статически распределяет память в стеке. Для неограниченных массивов переменного размера и массивов переменного размера, размер которых больше или равен порогу, генератор кода динамически выделяет память в куче.

Можно определить, разрешено ли динамическое выделение памяти или оно используется для создания кода. См. раздел Управление выделением памяти для массивов переменного размера.

Генератор кода представляет динамически распределенные данные как структурный тип с именем emxArray. Генератор кода генерирует служебные функции, которые создают и взаимодействуют с emxArrays. При использовании Embedded Coder ® можно настроить сгенерированные идентификаторы для emxArray типы и служебные функции. См. раздел Управление форматом идентификатора (встроенный кодер).

Включение и отключение поддержки массивов переменного размера

По умолчанию поддержка массивов переменного размера включена. Чтобы изменить эту поддержку:

  • В объекте конфигурации кода установите значение EnableVariableSizing параметр для true или false.

  • В приложении MATLAB ® Coder™ в разделе Параметры памяти установите или снимите флажок Включить переменный размер.

Массивы переменного размера в отчете о создании кода

Определить, является массив фиксированным размером или переменным размером, можно в столбце Размер (Size) вкладки Переменные (Variables) отчета о создании кода.

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

Связанные темы