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属性设置为false。在“代码生成设置”对话框中,清除使用 memcpy 进行向量赋值复选框。
启用 memcpy 优化时,对 memcpy 的使用取决于要复制的字节数。要复制的字节数是数组元素数乘以 C/C++ 数据类型所需的字节数。
如果要复制的元素数在编译时已知,则仅当字节数大于或等于
memcpy阈值时,代码生成器才会生成memcpy调用。如果在编译时不知道元素的数量,则代码生成器会生成
memcpy调用,而不考虑阈值。
默认 memcpy 阈值是 64 字节。要更改阈值,请使用以下方法之一:
在代码配置对象中,为
MemcpyThreshold属性指定不同字节数。在“代码生成设置”对话框中,为 Memcpy 阈值(字节) 参数输入不同值。
memset 优化也使用 memcpy 阈值。
在某些情况下,代码生成器可以生成 memcpy 调用,而不考虑 EnableMemcpy 或 MemcpyThreshold 参数或它们在 App 中的等效设置。