Оптимизация memset

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

Похожие темы