memcpy 优化
为了优化用于复制连续数组元素的生成代码,代码生成器会尝试通过调用 memcpy
来替换代码。memcpy
调用的效率可能高于 for
循环或多个连续元素赋值。下表显示了使用和不使用 memcpy
优化时生成的 C 代码示例。
使用 memcpy 优化时生成的代码 | 未使用 memcpy 优化时生成的代码 |
---|---|
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]; |
要启用或禁用 memcpy
优化,请执行以下操作:
在命令行中,将代码配置对象属性
EnableMemcpy
设置为true
或false
。默认值为true
。在 MATLAB® Coder™ 中,将使用 memcpy 进行向量赋值设置为是或否。默认值为是。
启用 memcpy
优化时,对 memcpy
的使用取决于要复制的字节数。要复制的字节数是数组元素数乘以 C/C++ 数据类型所需的字节数。
如果要复制的元素数在编译时已知,则仅当字节数大于或等于
memcpy
阈值时,代码生成器才会生成memcpy
调用。如果在编译时不知道元素的数量,则代码生成器会生成
memcpy
调用,而不考虑阈值。
默认 memcpy
阈值是 64 字节。要更改阈值,请执行以下操作:
在命令行中,设置代码配置对象属性
MemcpyThreshold
。在 MATLAB Coder 中,设置 Memcpy 阈值(字节)。
memset
优化也使用 memcpy
阈值。
在某些情况下,代码生成器可以生成 memcpy
调用,而不考虑 EnableMemcpy
或 MemcpyThreshold
参数或它们在 App 中的等效设置。