Управляйте выделением памяти для массивов переменного размера в блоке MATLAB Function

Динамическое выделение памяти выделяет память на куче по мере необходимости во время исполнения, вместо статического выделения памяти в стеке. Вы можете использовать динамическое выделение памяти для массивов внутри блока MATLAB Function.

Вы не можете использовать динамическое выделение памяти для:

  • Входной и выходной сигналы. Входные и выходные сигналы переменного размера должны иметь верхнюю границу.

  • Параметры или глобальные переменные. Параметры и глобальные переменные должны быть фиксированного размера.

  • Поля массивов шин. Массивы шин не могут иметь поля переменного размера.

  • Дискретные свойства состояний системных объектов, сопоставленных с блоком MATLAB System.

Динамическое выделение памяти выгодно, когда:

  • Вы не знаете верхней границы массива.

  • Вы не хотите выделять память в стеке для больших массивов.

Динамическое выделение памяти и освобождение этой памяти могут привести к более медленному выполнению сгенерированного кода. Чтобы контролировать использование динамического выделения памяти для массивов переменного размера в блоке MATLAB Function, можно:

Обеспечьте верхние границы для массивов переменного размера

Для неограниченного массива переменного размера генератор кода динамически выделяет память на куче. Для ограниченного массива переменного размера, если размер в байтах меньше, чем динамический порог выделения памяти, генератор кода статически выделяет память в стеке. Чтобы избежать динамического выделения памяти, задайте верхние границы для измерений массива так, чтобы размер массива, в байтах, был меньше, чем динамический порог выделения памяти. Смотрите «Задать верхние границы для массивов переменного размера».

Отключите динамическое выделение памяти для блоков MATLAB Function

По умолчанию динамическое выделение памяти для блоков MATLAB Function включено для целей на основе GRT и отключено для целей на основе ERT. Чтобы изменить настройку, в диалоговом окне Параметров конфигурации очистите или выберите Dynamic memory allocation in MATLAB functions.

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

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

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

Используйте динамический порог выделения памяти для:

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

  • Включите динамическое выделение памяти для больших массивов. Для больших массивов, когда вы используете динамическое выделение памяти, можно значительно уменьшить требования к памяти.

Значение по умолчанию для динамического порога выделения памяти составляет 64 килобайта. Чтобы изменить порог, в диалоговом окне Параметров конфигурации установите параметр Dynamic memory allocation threshold in MATLAB functions.

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

Похожие темы