Main Content

memcpy Optimization

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

Code Generated with memcpy OptimizationCode 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:

  • At the command line, set the code configuration object property EnableMemcpy to true or false. The default value is true.

  • In the MATLAB® Coder™ app, set Use memcpy for vector assignment to Yes or No. The default value is Yes.

When the memcpy optimization is enabled, the use of memcpy 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.

  • If the number of elements to copy is known at compile time, then the code generator produces a memcpy call only when the number of bytes is greater than or equal to the memcpy threshold.

  • If the number of elements is not known at compile time, then the code generator produces a memcpy call without regard to the threshold.

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

  • At the command line, set the code configuration object property MemcpyThreshold.

  • In the MATLAB Coder app, set Memcpy threshold (bytes).

The memset optimization also uses the memcpy threshold.

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

Related Topics