Чтобы оптимизировать сгенерированный код, который присваивает буквальную константу последовательным элементам массива, генератор кода пытается заменить код на memset
вызов. A memset
вызов может быть более эффективным, чем for
-цикл или несколько последовательных назначений элементов. В этой таблице показаны примеры сгенерированного кода C с 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
.