控制 MATLAB Function 模块中可变大小数组的内存分配
动态内存分配在运行时根据需要在堆上分配内存,而不是在堆栈上静态分配内存。您可以对 MATLAB Function 模块内的数组使用动态内存分配。
您不能将动态内存分配用于以下各项:
参数。参数必须为固定大小。
与 MATLAB System 模块关联的 System object 的离散状态属性。
在以下情况下,动态内存分配是有益的:
您不知道数组的上界。
您不想在堆栈上为大型数组分配内存。
动态内存分配和释放此内存会导致所生成代码的执行速度变慢。要控制 MATLAB Function 模块中可变大小数组的动态内存分配的使用,您可以:
为可变大小数组提供上界
对于无界的可变大小数组,代码生成器在堆上动态分配内存。对于有界的可变大小数组,如果大小(以字节为单位)小于动态内存分配阈值,代码生成器将在堆栈上静态分配内存。要避免动态内存分配,请提供数组维度的上界,以使数组的大小(以字节为单位)小于动态内存分配阈值。请参阅Specify Upper Bounds for Variable-Size Arrays。
为 MATLAB Function 模块禁用动态内存分配
默认情况下,对基于 GRT 的目标启用 MATLAB Function 模块的动态内存分配,而对基于 ERT 的目标禁用。要更改设置,请在“配置参数”对话框中,清除或选中在 MATLAB 函数中使用动态内存分配。此参数指定是否对仿真中的 MATLAB Function 模块、Stateflow® 图和 MATLAB System 模块中的 MATLAB® 代码以及代码生成使用动态内存分配。
如果禁用动态内存分配,则必须为可变大小数组提供上界。
修改动态内存分配阈值
您可以使用动态内存分配阈值来指定代码生成器何时使用动态内存分配,而不是为所有可变大小数组禁用动态内存分配。
使用动态内存分配阈值可以:
对较小的数组禁用动态内存分配。对于较小的数组,静态内存分配可以加快所生成代码的执行速度。但是,静态内存分配会导致未使用的存储空间。对于较小的数组,未使用的存储空间可能不是重要考虑因素,具体由您决定。
对较大的数组启用动态内存分配。对于较大的数组,使用动态内存分配可以显著降低存储要求。
动态内存分配阈值的默认值为 64 KB。要更改阈值,请在“配置参数”对话框中设置 MATLAB 函数中的动态内存分配阈值参数。此参数指定阈值(以字节为单位),在仿真和代码生成过程中,超出此阈值将为 MATLAB Function 模块、Stateflow 图和 MATLAB System 模块中的 MATLAB 代码的可变大小数组动态分配内存。
要对所有可变大小数组使用动态内存分配,请将阈值设置为 0
。