主要内容

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

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

  • 你不知道数组的上界。

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

动态内存分配和释放这些内存会导致生成代码的执行速度变慢。为了控制可变大小数组的动态内存分配,你可以:

为可变大小数组提供上界

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

  1. 指定可变大小数组的上界。看到指定可变大小数组的上界

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

禁用动态内存分配

缺省情况下,开启动态内存分配功能。禁用:

  • 在用于代码生成的配置对象中,设置DynamicMemoryAllocation参数“关闭”

  • MATLAB®编码器™应用程序,内存设置,设置动态内存分配从来没有

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

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

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

使用动态内存分配阈值:

  • 为较小的阵列禁用动态内存分配。对于较小的数组,静态内存分配可以加速生成的代码。但是,静态内存分配可能导致未使用的存储空间。您可以决定,对于较小的阵列,未使用的存储空间不是一个重要的考虑因素。

  • 为更大的数组启用动态内存分配。对于较大的数组,当您使用动态内存分配时,可以显著降低存储需求。

默认的动态内存分配阈值是64千字节。修改阈值。

  • 在用于代码生成的配置对象中,设置DynamicMemoryAllocationThreshold

  • MATLAB编码器应用程序,内存设置,设置动态内存分配阈值

指示代码生成器对大小大于或等于阈值的可变大小数组使用动态内存分配:

  • 在配置对象中,设置DynamicMemoryAllocationThreshold“阈值”

  • MATLAB编码器应用程序,内存设置,设置动态内存分配阈值对于最大大小大于或等于阈值的数组

相关话题