Чтобы оптимизировать сгенерированный код, который присваивает литеральную константу последовательным элементам массива, генератор кода пытается заменить код на вызов memset
. Вызов memset
может быть более эффективным, чем for
- цикл или несколько, последовательные присвоения элемента. Эта таблица показывает примеры сгенерированного кода C с и без memset
.
Код, Сгенерированный с memset Оптимизацией | Код, Сгенерированный Без memset Оптимизации |
---|---|
memset(&Y[0], 125, 100U * sizeof(signed char)); | for (i = 0; i < 100; i++) { Y[i] = 125; |
memset(&Z[0], 0, 1000U * sizeof(double)); | Z[0] = 0.0; Z[1] = 0.0; Z[2] = 0.0; ... Z[999] = 0.0; |
Генератор кода может использовать оптимизацию memset
для присвоения целочисленной константы или нуля с плавающей точкой. Использование memset
зависит от:
Размер значения, чтобы присвоить. Размер должен удовлетворить требования для вызова memset
C/C++.
Количество байтов, чтобы присвоить. Количество байтов, чтобы присвоить является количеством элементов массива, умноженных на количество байтов, требуемых для типа данных C/C++.
Если число элементов, чтобы присвоить известно во время компиляции, то генератор кода производит вызов memset
только, когда количество байтов больше, чем или равно порогу.
Если число элементов не известно во время компиляции, то генератор кода производит вызов memset
без отношения к порогу.
Порог оптимизации memset
совпадает с порогом оптимизации memcpy
. Порог по умолчанию составляет 64 байта. Изменить порог:
В командной строке, набор свойство объекта настройки кода MemcpyThreshold
.
В приложении MATLAB® Coder™, набор Memcpy threshold (bytes).
Для присвоения нуля с плавающей точкой, чтобы включить или отключить оптимизацию memset
:
В командной строке, набор свойство объекта настройки кода InitFltsAndDblsToZero
к true
или false
. Значением по умолчанию является true
.
В приложении MATLAB Coder, набор Use memset to initialize floats and doubles to 0.0 к Yes
или No
. Значением по умолчанию является Yes
.