Main Content

coder.nullcopy

在代码生成中声明未初始化的变量

说明

示例

X = coder.nullcopy(A)A 的类型、大小和复/实性复制到 X,但不复制元素值。该函数为 X 预分配内存,而不会导致初始化内存的开销。在代码生成中,coder.nullcopy 函数声明未初始化的变量。在 MATLAB® 中,coder.nullcopy 返回输入,满足 X 等于 A。

如果 X 是包含可变大小数组的结构体或类,则您必须指定每个数组的大小。coder.nullcopy 不会将数组或嵌套数组的大小从其参量复制到结果中。

注意

在函数或程序中使用 X 之前,请确保 X 中的数据已完全初始化。通过 coder.nullcopy 声明变量而不指定变量的所有元素会导致不确定的程序行为。有关详细信息,请参阅How to Eliminate Redundant Copies by Defining Uninitialized Variables

示例

全部折叠

此示例说明如何声明一个数组类型变量而不初始化该数组中的任何值。

要为以下函数生成代码,必须在通过下标对输出变量 outp 进行索引之前,将 outp 完全声明为 n×n 双精度实数数组。要在不初始化数组中所有值的情况下执行此声明,请使用 coder.nullcopy

function outp = foo(n) %#codegen

outp = coder.nullcopy(ones(n));
for idx = 1:n*n
   if mod(idx,2) == 0
      outp(idx) = idx;
   else
      outp(idx) = idx + 1;
   end
end

运行此 codegen (MATLAB Coder) 命令以生成代码并启动报告。

codegen -config:lib -c foo -args {0} -launchreport 

在代码生成报告中,点击追溯代码以查看 MATLAB 代码和生成的代码之间的映射。要使用代码可追溯性功能,您必须有 Embedded Coder®

下图显示使用和不使用 coder.nullcopy 生成的代码之间的比较。使用 coder.nullcopyones 可以指定数组 outp 的大小,而无需将每个元素初始化为 1。

Code mapping between MATLAB code and generated C code when using coder.nullcopy

如果不使用 coder.nullcopy,生成的代码会显式将 outp 中的每个元素初始化为 1(参见第 32 行到第 35 行)。

Code mapping between MATLAB code and generated C code without using coder.nullcopy

注意

在某些情况下,即使您没有在 MATLAB 代码中显式包含 coder.nullcopy 指令,代码生成器也会自动执行与 coder.nullcopy 对应的优化。

输入参数

全部折叠

要复制的变量,指定为标量、向量、矩阵或多维数组。

示例: coder.nullcopy(A);

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | class
复数支持:

限制

  • 您无法对稀疏矩阵使用 coder.nullcopy

  • 您无法将 coder.nullcopy 用于支持重载括号或需要索引方法来访问其数据的类,如 table

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2011a 中推出