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

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

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

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

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

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

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

  1. Задайте верхние границы для массива переменного размера. Смотрите «Задать верхние границы для массивов переменного размера».

  2. Убедитесь, что размер массива в байтах меньше динамического порога выделения памяти. Смотрите Configure Code Generator, чтобы использовать динамическое выделение памяти для массивов, больших, чем порог.

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

По умолчанию динамическое выделение памяти включено. Чтобы отключить его:

  • В объекте строения для генерации кода установите DynamicMemoryAllocation параметр в 'Off'.

  • В MATLAB® Приложение Coder™, в Memory параметрах настройки, набор Dynamic memory allocation к Never.

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

Сконфигурируйте генератор кода, чтобы использовать динамическое выделение памяти для массивов, больших, чем порог

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

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

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

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

Порог динамического выделения памяти по умолчанию составляет 64 килобайта. Чтобы изменить порог:

  • В объекте строения для генерации кода установите DynamicMemoryAllocationThreshold.

  • В приложении MATLAB Coder, в Memory settings, установите Dynamic memory allocation threshold.

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

  • В объекте строения установите DynamicMemoryAllocationThreshold на 'Threshold'.

  • В приложении MATLAB Coder, в Memory settings, установите Dynamic memory allocation threshold на For arrays with max size at or above threshold.

Похожие темы