Чтобы добиться более быстрого выполнения сгенерированного кода, минимизируйте динамическое (или во время выполнения) выделение памяти массивов.
MATLAB® Coder™ не предоставляет размер для неограниченных массивов в сгенерированном коде. Вместо этого на такие массивы косвенно ссылаются через указатели. Для таких массивов память не может быть выделена во время компиляции сгенерированного кода. Основываясь на требованиях к памяти для массивов, память выделяется и освобождается во время выполнения по мере необходимости. Это выделение и освобождение памяти во время выполнения приводит к более медленному выполнению сгенерированного кода.
Динамическое выделение памяти происходит, когда генератор кода не может найти верхние границы для массивов переменного размера. Программа не может найти верхние границы, когда вы задаете размер массива, используя переменную, которая не является константой времени компиляции. Примером такой переменной является переменный вход (или переменная, вычисленная из переменного входа).
Образцы в коде MATLAB, которые могут привести к динамическому выделению памяти:
Инициализация массива: Вы задаете размер массива с помощью переменной, значение которой известно только во время выполнения.
После инициализации массива:
Вы объявляете массив переменным размером, используя coder.varsize
без явных верхних границ. После этого объявления вы расширяете массив путем конкатенации внутри цикла. Количество запусков цикла известно только во время исполнения.
Вы используете reshape
функция в массиве. По крайней мере, один из аргументов размера в reshape
функция известна только во время исполнения.
Если вы знаете максимальный размер массива, можно избежать динамического выделения памяти. Затем можно задать верхнюю границу для массива и предотвратить динамическое выделение памяти в сгенерированном коде. Для получения дополнительной информации см. Раздел «Минимизация динамического выделения памяти».