Задайте верхние границы для массива, когда:
Динамическое выделение памяти отключено.
Если динамическое выделение памяти отключено, необходимо задать верхние границы для всех массивов.
Вы не хотите, чтобы генератор кода использовал динамическое выделение памяти для массива.
Задайте верхние границы, которые приводят к размеру массива (в байтах), который меньше, чем динамический порог выделения памяти.
Если вы генерируете код при помощи codegen
, чтобы задать верхние границы для входов переменного размера, используйте coder.typeof
конструкция с помощью -args
опция. Для примера:
codegen foo -args {coder.typeof(double(0),[3 100],1)}
Эта команда задает, что вход для работы foo
является матрицей вещественных двойников с двумя переменными размерностями. Верхняя граница для первой размерности равна 3. Верхняя граница для второго измерения равна 100.
Если вы генерируете код при помощи MATLAB® Coder™ приложение, см. "Задайте свойства входных параметров функции точки входа с помощью приложения" и сделайте размерности переменным размером, когда они удовлетворяют порогу размера ".
При использовании статического распределения генератор кода использует сложный анализ, чтобы вычислить верхние границы локальных данных. Однако, когда анализу не удается обнаружить верхнюю границу или вычисляет верхнюю границу, которая недостаточно точна для вашего приложения, необходимо явно задать верхние границы для локальных переменных.
Чтобы ограничить значение переменных, которые задают размерности массивов переменного размера, используйте assert
функция с реляционными операторами. Для примера:
function y = dim_need_bound(n) %#codegen assert (n <= 5); L= ones(n,n); M = zeros(n,n); M = [L; M]; y = M;
Это assert
оператор ограничивает входные n
до максимального размера 5. L
- переменный размер с верхними границами 5 в каждой размерности. M
переменный размер с верхней границей 10 в первой размерности и 5 во втором измерении.
Чтобы задать верхние границы для всех образцов локальной переменной в функции, используйте coder.varsize
функция. Для примера:
function Y = example_bounds1(u) %#codegen Y = [1 2 3 4 5]; coder.varsize('Y',[1 10]); if (u > 0) Y = [Y Y+u]; else Y = [Y Y*u]; end
Второй аргумент coder.varsize
задает верхнюю границу для каждого образца переменной, заданную в первом аргументе. В этом примере аргумент [1 10]
указывает, что для каждого образца Y
:
Первая размерность фиксируется при размере 1.
Второе измерение может вырасти до верхней границы 10.