Main Content

控件可变大小数组的内存分配

动态内存分配在运行时根据需要在堆上分配内存,而不是在堆栈上静态分配内存。在以下情况下,动态内存分配是有益的:

  • 您不知道数组的上界。

  • 您不想在堆栈上为大型数组分配内存。

动态内存分配和释放此内存会导致所生成代码的执行速度变慢。要控制可变大小数组的动态内存分配的使用,您可以:

为可变大小数组提供上界

对于无界的可变大小数组,代码生成器在堆上动态分配内存。对于具有上界且其大小(以字节为单位)小于动态内存分配阈值的可变大小数组,代码生成器将在堆栈上静态分配内存。要防止动态内存分配,请执行以下操作:

  1. 指定可变大小数组的上界。请参阅Specify Upper Bounds for Variable-Size Arrays

  2. 确保数组的大小(以字节为单位)小于动态内存分配阈值。请参阅将代码生成器配置为对大于阈值的数组使用动态内存分配

禁用动态内存分配

默认情况下,对可变大小数组启用动态内存分配。要禁用此功能,请执行以下操作:

  • 在用于代码生成的配置对象中,将 EnableDynamicMemoryAllocation 参数设置为 false

  • MATLAB® Coder™内存设置中,取消选中启用动态内存分配复选框。

如果禁用动态内存分配,则必须为可变大小数组提供上界。

将代码生成器配置为对大于阈值的数组使用动态内存分配

您可以指定代码生成器对哪些大小的数组使用动态内存分配,而不是对所有可变大小数组禁用动态内存分配。

使用动态内存分配阈值可以:

  • 对较小的数组禁用动态内存分配。对于较小的数组,静态内存分配可以加快所生成代码的执行速度。但是,静态内存分配会导致未使用的存储空间。对于较小的数组,未使用的存储空间可能不是重要考虑因素,具体由您决定。

  • 对较大的数组启用动态内存分配。对于较大的数组,使用动态内存分配可以显著降低存储要求。

默认动态内存分配阈值为 64 KB。要更改阈值,请执行以下操作:

  • 在用于代码生成的配置对象中,将 EnableDynamicMemoryAllocation 设置为 true,并为 DynamicMemoryAllocationThreshold 设置值。

  • MATLAB Coder内存设置中,选中启用动态内存分配复选框,并设置动态内存分配阈值的值。

相关主题