memcpy Optimization - MATLAB & Simulink (original) (raw)

Main Content

To optimize generated code that copies consecutive array elements, the code generator tries to replace the code with a memcpy call. Amemcpy call can be more efficient than afor-loop or multiple, consecutive element assignments. This table shows examples of generated C code with and without the memcpy optimization.

Code Generated with memcpy Optimization Code Generated Without memcpy Optimization
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];

To enable or disable the memcpy optimization:

When the memcpy optimization is enabled, the use ofmemcpy depends on the number of bytes to copy. The number of bytes to copy is the number of array elements multiplied by the number of bytes required for the C/C++ data type.

The default memcpy threshold is 64 bytes. To change the threshold:

The memset optimization also uses thememcpy threshold.

In certain cases, the code generator can produce a memcpy call without regard to the EnableMemcpy orMemcpyThreshold parameters, or their equivalent settings in the app.