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 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:
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.