为了更快地执行生成的代码,尽量减少数组的动态(或运行时)内存分配。
MATLAB®编码器™在生成的代码中不提供无边界数组的大小。相反,这些数组是通过指针间接引用的。对于这样的数组,在编译生成的代码期间不能分配内存。根据数组的存储需求,在运行时根据需要分配和释放内存。这种运行时分配和释放内存会导致生成代码的执行速度变慢。
当代码生成器无法找到可变大小数组的上界时,就会发生动态内存分配。当您使用非编译时常量的变量指定数组的大小时,软件无法找到上界。这种变量的一个例子是输入变量(或从输入变量计算出来的变量)。
MATLAB代码中可以导致动态内存分配的实例有:
数组初始化:使用只有在运行时才知道其值的变量指定数组大小。
数组初始化后:
使用coder.varsize
没有明确的上界。声明之后,在循环中通过连接展开数组。循环运行的次数只有在运行时才知道。
你使用重塑
函数。的size参数中至少有一个重塑
函数仅在运行时已知。
如果知道数组的最大大小,就可以避免动态内存分配。然后,您可以为数组提供一个上限,并防止在生成的代码中动态分配内存。有关更多信息,请参见最小化动态内存分配.