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