Чтобы оптимизировать сгенерированный код, который копирует последовательные элементы массива, генератор кода пытается заменить код на вызов memcpy
. Вызов memcpy
может быть более эффективным, чем for
- цикл или несколько, последовательные присвоения элемента. Эта таблица показывает примеры сгенерированного кода C с и без оптимизации memcpy
.
Код, Сгенерированный с memcpy Оптимизацией | Код, Сгенерированный Без memcpy Оптимизации |
---|---|
memcpy(&C[0], &A[0], 10000U * sizeof(double)); |
for (i0 = 0; i0 < 10000; i0++) { C[i0] = A[i0]; |
memcpy(&Z[0], &X[0],1000U * sizeof(double)); |
Z[0] = X[0]; Z[1] = X[1]; Z[2] = X[2]; ... Z[999] = X[999]; |
Включить или отключить оптимизацию memcpy
:
В командной строке, набор свойство объекта настройки кода EnableMemcpy
к true
или false
. Значением по умолчанию является true
.
В приложении MATLAB® Coder™, набор Use memcpy for vector assignment к Yes
или No
. Значением по умолчанию является Yes
.
Когда оптимизация memcpy
включена, использование memcpy
зависит от количества байтов, чтобы скопировать. Количество байтов, чтобы скопировать является количеством элементов массива, умноженных на количество байтов, требуемых для типа данных C/C++.
Если число элементов, чтобы скопировать известно во время компиляции, то генератор кода производит вызов memcpy
только, когда количество байтов больше, чем или равно порогу memcpy
.
Если число элементов не известно во время компиляции, то генератор кода производит вызов memcpy
без отношения к порогу.
Порог memcpy
по умолчанию составляет 64 байта. Изменить порог:
В командной строке, набор свойство объекта настройки кода MemcpyThreshold
.
В приложении MATLAB Coder, набор Memcpy threshold (bytes).
Оптимизация memset
также использует порог memcpy
.
В определенных случаях генератор кода может произвести вызов memcpy
без отношения к EnableMemcpy
или параметрам MemcpyThreshold
или их эквивалентным настройкам в приложении.