Main Content

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 设置为 truefalse。默认值为 true

  • MATLAB® Coder™ 中,将使用 memcpy 进行向量赋值设置为。默认值为

启用 memcpy 优化时,对 memcpy 的使用取决于要复制的字节数。要复制的字节数是数组元素数乘以 C/C++ 数据类型所需的字节数。

  • 如果要复制的元素数在编译时已知,则仅当字节数大于或等于 memcpy 阈值时,代码生成器才会生成 memcpy 调用。

  • 如果在编译时不知道元素的数量,则代码生成器会生成 memcpy 调用,而不考虑阈值。

默认 memcpy 阈值是 64 字节。要更改阈值,请执行以下操作:

  • 在命令行中,设置代码配置对象属性 MemcpyThreshold

  • MATLAB Coder 中,设置 Memcpy 阈值(字节)

memset 优化也使用 memcpy 阈值。

在某些情况下,代码生成器可以生成 memcpy 调用,而不考虑 EnableMemcpyMemcpyThreshold 参数或它们在 App 中的等效设置。

相关主题