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 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]; |
The memcpy
optimization is enabled by default. To disable this
optimization, use one of these approaches:
In a code configuration object, set the
EnableMemcpy
property tofalse
.In the Code Generation Settings dialog box, clear the Use memcpy for vector assignment check box.
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 thememcpy
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, use one of these approaches:
In a code configuration object, specify a different number of bytes for the
MemcpyThreshold
property.In the Code Generation Settings dialog box, enter a different value for the Memcpy threshold (bytes) parameter.
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.