Main Content

固定サイズの配列に対する動的メモリ割り当ての制御

MATLAB® Coder™ によって生成されたコードは、サイズが指定したしきい値よりも小さい固定サイズの配列に対してプログラム スタックにメモリを割り当てます。たとえば、次のコードでは Z は固定サイズの 1 行 4 列の配列です。

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

動的メモリ割り当てでは、プログラム スタックではなくヒープ上でメモリを割り当てます。スタック メモリを使い尽くす可能性がある大きな固定サイズの配列では、動的メモリ割り当てを検討してください。

動的メモリ割り当てによって、生成されたコードの実行速度が遅くなる場合があります。

固定サイズの配列に対する動的メモリ割り当ての有効化

既定では、固定サイズの配列に対する動的メモリ割り当ては無効になっています。次のいずれかの方法を使用して有効にします。

  • コード生成の構成オブジェクトで、EnableDynamicMemoryAllocation プロパティおよび DynamicMemoryAllocationForFixedSizeArrays プロパティを true に設定します。

  • MATLAB Coder[メモリ] 設定で、[動的メモリ割り当てを有効化][固定サイズの配列に対する動的メモリ割り当てを有効化] を選択します。

固定サイズの配列の動的メモリ割り当てしきい値の設定

固定サイズの配列に対する動的メモリ割り当てが有効になっている場合、コード ジェネレーターは、サイズ (バイト単位) が動的メモリ割り当てしきい値以上の固定サイズの配列に対してヒープ上でメモリを動的に割り当てます。

動的メモリ割り当ての既定のしきい値は 64 キロバイトです。しきい値を構成するには、以下のいずれかを使用します。

  • コード生成の構成オブジェクトで、DynamicMemoryAllocationThreshold プロパティの値を設定します。

  • MATLAB Coder[メモリ] 設定で、[動的メモリ割り当てしきい値] の値を設定します。

固定サイズの配列のコード生成

2 つの大きな固定サイズの配列 ab の積を計算する MATLAB 関数を定義します。

function y = productLargeSize(a,b)
  y = a*b;
end
C コードを生成します。
cfg = coder.config('lib');
cfg.VerificationMode="SIL";
cfg.DynamicMemoryAllocationForFixedSizeArrays = true;
t = coder.typeof(0,[1e4 1e4]);
codegen productLargeSize -args {t,t} -config cfg - report

固定サイズの配列に対する動的メモリ割り当てを有効にすることで、配列 a および b はヒープ上で動的に割り当てられ、スタック オーバーフローが回避されます。

生成コード

...
void tlargeSize(const emxArray_real_T *a, const emxArray_real_T *b,
                emxArray_real_T *y)
{
  const double *a_data;
  const double *b_data;
  double *y_data;
...

使用に関するメモと制限

固定サイズの配列に対する動的メモリ割り当てが有効になっている場合、以下のとおりです。

メモ

固定サイズの配列に対する動的メモリ割り当ての有効化は、GPU コード生成ではサポートされていません。

参考

| |

関連するトピック