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.