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