exponenta event banner

Динамическое выделение памяти и производительность

Чтобы ускорить выполнение сгенерированного кода, минимизируйте динамическое (или динамическое) выделение памяти массивам.

MATLAB ® Coder™ не предоставляет размер для неограниченных массивов в сгенерированном коде. Вместо этого на такие массивы ссылаются косвенно через указатели. Для таких массивов память не может быть выделена во время компиляции сгенерированного кода. Исходя из требований к хранению для массивов, память выделяется и освобождается во время выполнения по мере необходимости. Это распределение времени выполнения и освобождение памяти приводит к более медленному выполнению сгенерированного кода.

Когда происходит динамическое выделение памяти

Динамическое выделение памяти происходит, когда генератор кода не может найти верхние границы для массивов переменного размера. Программа не может найти верхние границы при указании размера массива с помощью переменной, которая не является константой времени компиляции. Примером такой переменной является входная переменная (или переменная, вычисленная из входной переменной).

Экземпляры в коде MATLAB, которые могут привести к динамическому выделению памяти:

  • Инициализация массива: размер массива задается с помощью переменной, значение которой известно только во время выполнения.

  • После инициализации массива:

    • Массив объявляется как переменный размер с помощью coder.varsize без явных верхних границ. После этого объявления массив расширяется путем конкатенации внутри цикла. Количество циклов известно только во время выполнения.

    • Вы используете reshape в массиве. По крайней мере один из аргументов размера для reshape функция известна только во время выполнения.

Если известен максимальный размер массива, можно избежать динамического выделения памяти. Затем можно указать верхнюю границу массива и предотвратить динамическое выделение памяти в сгенерированном коде. Дополнительные сведения см. в разделе Минимизация динамического выделения памяти.