主要内容

在生成的代码中消除变量的冗余副本

当出现冗余副本时

在C/ c++代码生成期间,代码生成器检查是否有语句试图访问未初始化的内存。如果它检测到使用了变量但可能没有定义的执行路径,它将生成编译时错误。为了防止这些错误,在操作中使用变量或将它们作为函数输出返回之前,通过赋值定义变量。

但是请注意,变量赋值不仅将赋值数据的属性复制到新变量,而且还将新变量初始化为赋值值。这种强制初始化有时会导致C/ c++代码中的冗余副本。属性定义未初始化的变量,以消除冗余复制coder.nullcopy函数,如如何通过定义未初始化的变量来消除冗余副本

如何通过定义未初始化的变量来消除冗余副本

  1. coder.nullcopy

  2. 在读取变量之前初始化它。

    当未初始化的变量是数组时,在将数组作为输入传递给函数或操作符之前,必须初始化它的所有元素——即使函数或操作符没有从数组的未初始化部分读取。

    如果访问未初始化的数据会发生什么?

定义未初始化变量

在以下代码中,赋值语句X = 0 (1, N)不仅定义了X为实双精度数的1 × 5向量,但也初始化每个元素X为零。

函数X = withoutNullcopy% # codegenN = 5;X = 0 (1, N);i = 1: N如果X(i) = 0; / / X(i) = 0elseifX(i) = 0;结束结束

这种强制初始化在生成的代码中创建了一个额外的副本。要消除这种开销,请使用coder.nullcopy在定义X

函数X = withNullcopy% # codegenN = 5;X = coder.nullcopy (0 (1, N));i = 1: N如果X(i) = 0; / / X(i) = 0其他的X (i) = 0;结束结束

另请参阅

相关的话题