Чтобы оптимизировать сгенерированный код, копирующий последовательные элементы массива, генератор кода пытается заменить код на 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 toYes или No. Значение по умолчанию: Yes.
Когда memcpy оптимизация включена, использование memcpy зависит от количества копируемых байтов. Количество копируемых байтов - это количество элементов массива, умноженное на количество байтов, необходимых для типа данных C/C + +.
Если число копируемых элементов известно во время компиляции, то генератор кода создает memcpy вызов только в том случае, если количество байтов больше или равно memcpy пороговое значение.
Если число элементов не известно во время компиляции, то генератор кода производит memcpy вызов без учета порогового значения.
Дефолт memcpy пороговое значение составляет 64 байта. Чтобы изменить пороговое значение, выполните следующие действия.
В командной строке задайте свойство объекта конфигурации кода MemcpyThreshold.
В приложении MATLAB Coder установите пороговое значение Memcpy (байт).
memset оптимизация также использует memcpy пороговое значение.
В некоторых случаях генератор кода может производить memcpy звонок без учета EnableMemcpy или MemcpyThreshold параметры или их эквивалентные параметры в приложении.