主要内容

动态内存分配和性能

为了更快地执行生成的代码,尽量减少数组的动态(或运行时)内存分配。

MATLAB®编码器™在生成的代码中不提供无边界数组的大小。相反,这些数组是通过指针间接引用的。对于这样的数组,在编译生成的代码期间不能分配内存。根据数组的存储需求,在运行时根据需要分配和释放内存。这种运行时分配和释放内存会导致生成代码的执行速度变慢。

发生动态内存分配时

当代码生成器无法找到可变大小数组的上界时,就会发生动态内存分配。当您使用非编译时常量的变量指定数组的大小时,软件无法找到上界。这种变量的一个例子是输入变量(或从输入变量计算出来的变量)。

MATLAB代码中可以导致动态内存分配的实例有:

  • 数组初始化:使用只有在运行时才知道其值的变量指定数组大小。

  • 数组初始化后:

    • 使用coder.varsize没有明确的上界。声明之后,在循环中通过连接展开数组。循环运行的次数只有在运行时才知道。

    • 你使用重塑函数。的size参数中至少有一个重塑函数仅在运行时已知。

如果知道数组的最大大小,就可以避免动态内存分配。然后,您可以为数组提供一个上限,并防止在生成的代码中动态分配内存。有关更多信息,请参见最小化动态内存分配