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
EnableMemcpyproperty 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
memcpycall only when the number of bytes is greater than or equal to thememcpythreshold.If the number of elements is not known at compile time, then the code generator produces a
memcpycall 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
MemcpyThresholdproperty.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.