動的メモリの割り当てとパフォーマンス
生成コードの実行の高速化を達成するには、配列の動的 (または実行時) メモリ割り当てを最小限にします。
MATLAB® Coder™ は生成コードの制限のない配列に対してサイズを指定しません。代わりに、このような配列はポインターを使用して間接的に参照されます。このような配列の場合、生成コードのコンパイル時にメモリを割り当てることができません。配列のストレージの要件に基づいて、必要に応じて実行時にメモリの割り当てと解放が行われます。この実行時のメモリの割り当てと解放により、生成コードの実行が遅くなります。
動的メモリ割り当てが発生するタイミング
コード ジェネレーターで可変サイズの配列の上限を検出できない場合、動的メモリ割り当てが生じます。コンパイル時の定数ではない変数を使用して配列のサイズを指定した場合は、ソフトウェアで上限を検出できません。このような変数の例として、入力変数 (または入力変数から計算される変数) があります。
動的メモリ割り当てが生じる可能性のある MATLAB コードのインスタンスは次のとおりです。
配列の初期化: 実行時にのみ認知される値をもつ変数を使用して配列サイズを指定する場合。
配列の初期化後:
coder.varsize
を使用して明示的な上限なしで、配列を可変サイズとして宣言する場合。この宣言の後、ループ内での連結によって配列を展開します。ループの実行回数は実行時にしかわかりません。配列で関数
reshape
を使用する場合。関数reshape
のサイズ引数の少なくとも 1 つが実行時にのみわかります。
配列の最大サイズがわかっている場合は、動的メモリ割り当てを回避できます。配列の上限を指定し、生成コードの動的メモリ割り当てを防ぐことができます。詳細は、動的メモリ割り当ての最小化を参照してください。