动态内存分配和性能

为了更快地执行生成的代码,最小化数组的动态(或运行时)内存分配。

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

当动态内存分配发生时

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

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

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

  • 数组初始化后:

    • 将数组声明为可变大小数组coder.varsize没有明确的上界。声明之后,通过循环内的连接扩展数组。循环运行的次数只有在运行时才知道。

    • 你使用重塑函数的数组。属性的至少一个大小参数重塑函数仅在运行时已知。

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