2014-09-05 27 views
0

我有一个使用Matlab编码器转换为C++的Matlab函数。输入是一维数组:Infx1,matlab函数的输出是一个二维数组。我初始化此使用二维数组在matlab中没有正确设置为C++转换

result = zeros(500,18); 

(输出)在我的主循环我维持一个变量count变化范围是1至500和环路我填使用输出数组的末尾之前

result(count,:) = blocks; 

其中块是在每个循环中计算的18x1向量。

在我转换后的C++文件中,我认为result是一个二维数组。但它正好是与给定的输出的向量由

for (loop_ub = 0; loop_ub < 18; loop_ub++) { 
      result[(count + 500 * loop_ub) - 1] = blocks[loop_ub]; 
     } 

result初始化可以看作是

memset(&result[0], 0, 9000U * sizeof(real_T)); 

我不能找出的原因,这不是一个2-d阵列。任何帮助,高度赞赏。

感谢

回答

1

所有的内存是最终平(一维)和你解释,当这种方式往往获得最佳的性能。在这种情况下,一个单独的分配将会执行(大小为500 * 18 * sizeof(real_T)),所以matlab使用它 - 由于空间局部性,您将获得更好的缓存性能。代码生成器可以用多维数组类型封装分配(例如,参见this question),但这掩盖了每行在内存中实际上是连续的这一事实,这是一个有用的事实。否则,例如,不清楚是否可以使用单个memset来初始化数组。