动态内存分配与性能
为了实现生成代码的更快执行,请尽量减少数组的动态(即运行时)内存分配。
MATLAB® Coder™ 不会为生成代码中的无界数组提供大小。在这种情况下,这些数组通过指针间接引用。对于此类数组,无法在生成代码的编译期间分配内存。根据数组的存储需求,内存会在运行时按需分配和释放。这种运行时的内存分配和释放会导致生成代码的执行速度变慢。
发生动态内存分配的情况
当代码生成器找不到可变大小数组的上界时,就会发生动态内存分配。当您使用作为非编译时常量的变量指定数组大小时,软件找不到上界。此类变量的一个示例是输入变量(或从输入变量计算的变量)。
MATLAB 代码中可能导致动态内存分配的情况包括:
数组初始化:您使用仅在运行时才知其值的变量指定数组大小。
在数组初始化后:
您使用
coder.varsize将数组声明为可变大小,但没有显式上界。在此声明后,您通过在循环内串联来扩展该数组。循环运行的次数仅在运行时才知道。您对数组使用
reshape函数。reshape函数的至少一个大小参量仅在运行时才知道。
最小化动态内存分配
尽可能减少动态内存分配,因为这会导致生成代码的执行速度变慢。如果知道可变大小数组的最大大小,就可以避免动态内存分配。请按照以下步骤操作:
根据您的需求,执行以下操作之一:
小心
如果 MATLAB 代码中的可变大小数组没有最大大小,则禁用动态内存分配会导致代码生成错误。在禁用动态内存分配之前,必须在您的 MATLAB 代码中提供可变大小数组的最大大小。