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

Для генерации кода измерение массива равно 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.

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

Можно определить, имеет ли массив фиксированный или переменный размер, посмотрев на Size столбец вкладки Variables в отчете генерации кода.

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

Похожие темы