在C/ c++代码生成期间,代码生成器检查是否有语句试图访问未初始化的内存。如果它检测到使用了变量但可能没有定义的执行路径,它将生成编译时错误。为了防止这些错误,在操作中使用变量或将它们作为函数输出返回之前,通过赋值定义变量。
但是请注意,变量赋值不仅将赋值数据的属性复制到新变量,而且还将新变量初始化为赋值值。这种强制初始化有时会导致C/ c++代码中的冗余副本。属性定义未初始化的变量,以消除冗余复制coder.nullcopy
函数,如如何通过定义未初始化的变量来消除冗余副本.
用coder.nullcopy
.
在读取变量之前初始化它。
当未初始化的变量是数组时,在将数组作为输入传递给函数或操作符之前,必须初始化它的所有元素——即使函数或操作符没有从数组的未初始化部分读取。
在以下代码中,赋值语句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;结束结束