主要内容

可变大小阵列的代码生成

对于代码生成,数组维度是固定大小要么可变大小。如果代码生成器可以确定尺寸的大小并且尺寸的大小不会改变,则维度为固定大小。当阵列的所有尺寸都是固定的大小时,阵列是一个固定大小大批。在以下示例中,Z.是一个固定尺寸的阵列。

功能z = myfcn()z = zeros(1,4);结尾

第一尺寸的尺寸为1,第二尺寸的尺寸为4。

如果代码生成器无法确定维度的大小或代码生成器确定大小的变化,则维度是可变的大小。当其尺寸中的至少一个是可变的大小时,数组是一个可变大小大批。

可变尺寸的维度有限的要么无界限。有界尺寸具有固定的较高尺寸。无界尺寸没有固定的较高尺寸。

在以下示例中,第二维度Z.是有界,可变的大小。它的上限为16。

功能s = myfcn(n)如果(n> 0)z = zeros(1,4);别的z =零(1,16);结尾s =长度(z);

在以下示例中,如果值N.在编译时未知,然后是第二个维度Z.是无限的。

功能s = myfcn(n)z = rand(1,n);s = sum(z);结尾

您可以通过以下方式定义可变大小的数组:

  • 使用构造函数,如Zeros.,具有不合适的维度

  • 在使用之前将多个常量大小分配给同一个变量

  • 通过使用将变量的所有实例声明为可变大小编码器.Varsize.

有关更多信息,请参阅定义代码生成的可变大小数据

您可以控制代码生成是否允许可变大小阵列。看启用和禁用对可变大小阵列的支持金宝app

变量大小阵列的内存分配

对于尺寸小于阈值的固定大小阵列和可变大小阵列,代码生成器在堆栈上静态地分配内存。对于无限的,可变大小的阵列和尺寸大于或等于阈值的可变大小阵列,代码生成器在堆上动态地分配内存。

为一个Matlab功能块,您无法使用动态内存分配:

  • 输入和输出信号。可变尺寸输入和输出信号必须具有上限。

  • 参数或全局变量。参数和全局变量必须是固定大小的。

  • 公交车阵列的领域。总线阵列不能具有可变大小的字段。

您可以控制是否允许动态内存分配或用于代码生成时。看MATLAB功能块中可变大小阵列的控制内存分配

代码生成器表示动态分配的数据作为调用的结构类型emxarray。代码生成器生成与EMXARRASE创建和交互的实用程序函数。如果您使用嵌入式编码器®,您可以自定义生成的标识符emxarray类型和实用程序功能。看标识符格式控制(嵌入式编码器)

启用和禁用对可变大小阵列的支持金宝app

默认情况下,对于Matlab功能块,启用对可变大金宝app小阵列的支持。要禁用此支持:金宝app

  1. 在MATLAB功能块编辑器中,选择编辑数据

  2. 清除金宝app支持变量大小阵列复选框。

MATLAB函数报告中的可变大小阵列

您可以通过查看阵列是否是固定的大小或可变大小的尺寸栏目变量在MATLAB函数报告中的选项卡。

冒号(:)表示维度是可变的大小。问号(?)表示大小无限制。例如,大小为1-of-:?表示第一尺寸的尺寸为固定尺寸1,第二维度的尺寸是无限的,可变的大小。斜体表示您的代码指定数组是可变的大小,但代码生成器确定它不会改变大小。

相关话题