Dynamic Memory Allocation and Performance
To achieve faster execution of generated code, minimize dynamic (or run-time) memory allocation of arrays.
MATLAB® Coder™ does not provide a size for unbounded arrays in generated code. Instead, such arrays are referenced indirectly through pointers. For such arrays, memory cannot be allocated during compilation of generated code. Based on storage requirements for the arrays, memory is allocated and freed at run time as required. This run-time allocation and freeing of memory leads to slower execution of the generated code.
When Dynamic Memory Allocation Occurs
Dynamic memory allocation occurs when the code generator cannot find upper bounds for variable-size arrays. The software cannot find upper bounds when you specify the size of an array using a variable that is not a compile-time constant. An example of such a variable is an input variable (or a variable computed from an input variable).
Instances in the MATLAB code that can lead to dynamic memory allocation are:
Array initialization: You specify array size using a variable whose value is known only at run time.
After initialization of an array:
You declare the array as variable-size using
coder.varsizewithout explicit upper bounds. After this declaration, you expand the array by concatenation inside a loop. The number of loop runs is known only at run time.
You use a
reshapefunction on the array. At least one of the size arguments to the
reshapefunction is known only at run time.
If you know the maximum size of the array, you can avoid dynamic memory allocation. You can then provide an upper bound for the array and prevent dynamic memory allocation in generated code. For more information, see Minimize Dynamic Memory Allocation.