最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

可変サイズの配列のコード生成

コード生成では、配列の次元は "固定サイズ" または "可変サイズ" になります。コード ジェネレーターで次元のサイズと、次元のサイズが変更されていないことを確認できる場合、次元は固定サイズです。配列のすべての次元が固定サイズである場合、配列は "固定サイズ" の配列になります。以下の例では、Z は固定サイズの配列です。

function Z = myfcn()
Z = zeros(1,4);
end

最初の次元のサイズは 1 で、2 番目の次元のサイズは 4 です。

コード ジェネレーターで次元のサイズを確認できない場合、またはコード ジェネレーターがサイズが変更されたと判断する場合、次元は可変サイズです。少なくとも 1 つの次元が可変サイズである場合、配列は "可変サイズ" 配列になります。

可変サイズの次元は、"制限付き" または "制限なし" のいずれかです。制限付き次元には固定のサイズ上限があります。制限なし次元には固定のサイズ上限がありません。

次の例では、Z の 2 番目の次元が制限付きの可変サイズです。16 という上限があります。

function s = myfcn(n)
if (n > 0)
    Z = zeros(1,4);
else
    Z = zeros(1,16);
end
s = length(Z);

次の例では、n の値がコンパイル時に不明な場合、Z の 2 番目の次元は制限なしです。

function s = myfcn(n)
Z = rand(1,n);
s = sum(Z);
end

次のように可変サイズ配列を定義できます。

  • zeros などのコンストラクターで不定次元を使用する

  • 同一の変数に対して、その変数を使う前に複数種類の固定サイズを代入する

  • coder.varsize を使用して、1 つの変数のすべてのインスタンスを可変サイズとして宣言する

詳細については、コード生成のための可変サイズ データの定義を参照してください。

コード生成で可変サイズの配列を許可するかどうか制御できます。可変サイズの配列に対するサポートの有効化および無効化を参照してください。

可変サイズ配列のメモリ割り当て

サイズがしきい値よりも小さい固定サイズの配列と可変サイズの配列では、コード ジェネレーターはスタックでメモリを静的に割り当てます。制限のない可変サイズの配列およびサイズがしきい値以上の可変サイズの配列では、コード ジェネレーターはヒープでメモリを動的に割り当てます。

動的メモリ割り当てを許可するかどうか、コード生成で使用するタイミングを制御できます。可変サイズの配列に対するメモリ割り当ての制御を参照してください。

コード ジェネレーターは、動的に割り当てられたデータを emxArray と呼ばれる構造体型として表します。コード ジェネレーターは、emxArrays を作成して操作するユーティリティ関数を生成します。Embedded Coder® を使用する場合は、emxArray 型とユーティリティ関数用に生成された識別子をカスタマイズできます。Identifier Format Control (Embedded Coder)を参照してください。

可変サイズの配列に対するサポートの有効化および無効化

既定では、可変サイズの配列に対するサポートは有効化されています。このサポートを変更するには、次を行います。

  • コード構成オブジェクト内で EnableVariableSizing パラメーターを true または false に設定する。

  • MATLAB® Coder™ アプリの [メモリ] 設定で、[可変サイズを有効化] チェック ボックスをオンまたはオフにする。

コード生成レポートの可変サイズの配列

コード生成レポートの [変数] タブの [サイズ] 列を参照して、配列が固定サイズか可変サイズかを確認できます。

コロン (:) は、次元が可変サイズであることを示しています。疑問符 (?) は、サイズの制限がないことを示しています。たとえば、サイズが 1 行 :? 列である場合、最初の次元のサイズは固定サイズ 1 で、2 番目の次元のサイズは制限のない可変サイズであることを示します。イタリックは、コード ジェネレーターによって可変サイズの配列が生成されたものの、配列のサイズが実行時に変更されないことを示します。

関連するトピック