Чтобы оптимизировать сгенерированный код, который присваивает литеральную константу последовательным элементам массива, генератор кода пытается заменить код на 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
.