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 优化,请使用以下方法之一:
在代码配置对象中,将
InitFltsAndDblsToZero属性设置为false。在“代码生成设置”对话框中,清除使用 memset 将浮点数和双精度值初始化为 0.0 复选框。