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

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

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

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

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

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

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

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

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

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

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