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 を通じて、変数のすべての要素を割り当てることなく変数を宣言すると、プログラムの動作が非確定的なものになります。詳細については、未初期化変数を定義することにより余分なコピーを排除する方法を参照してください。

すべて折りたたむ

この例では、配列の値を初期化せずに、配列型の変数を宣言する方法を示します。

次の関数のコードを生成するには、出力変数 outp に添字を付ける前に、outp"n""n" 列の実数の double の配列として完全に宣言しなければなりません。この宣言を配列のいずれの値も初期化せずに行うには、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 を使用すると、各要素を 1 に初期化することなく、配列 outp のサイズを指定できます。

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 で導入