主要内容

memset 优化

为了优化对连续数组元素进行字面常量赋值的生成代码,代码生成器会尝试通过调用 memset 来替换代码。memset 调用的效率可能高于 for 循环或多个连续元素赋值。下表显示了使用和不使用 memset 时生成的 C 代码示例。

使用 memset 优化时生成的代码未使用 memset 优化时生成的代码
 memset(&Y[0], 125, 100U * sizeof(signed char));
for (i = 0; i < 100; i++) {
    Y[i] = 125;
memset(&Z[0], 0, 1000U * sizeof(double));
Z[0] = 0.0;
Z[1] = 0.0;
Z[2] = 0.0;
...
Z[999] = 0.0;

代码生成器可以使用 memset 优化来进行整数常量或浮点零赋值操作。memset 的使用取决于:

  • 要赋予的值的大小。大小必须满足 C/C++ memset 调用的要求。

  • 要赋值的字节数。要分配的字节数是数组元素数乘以 C/C++ 数据类型所需的字节数。

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

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

memset 优化阈值与 memcpy 优化阈值相同。默认阈值是 64 字节。要更改阈值,请使用以下方法之一:

  • 在代码配置对象中,为 MemcpyThreshold 属性指定值。

  • 在“代码生成设置”对话框中,为 Memcpy 阈值(字节) 参数指定值。

默认情况下,对于浮点零和双精度零的赋值,代码生成器使用 memset 优化。要禁用 memset 优化,请使用以下方法之一:

另请参阅

主题