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