0

我有一个使用 Matlab Coder 转换为 C++ 的 Matlab 函数。matlab函数的输入是一维数组,:Infx1输出是二维数组。我使用初始化这个(输出)

result = zeros(500,18); 

在我的主循环中,我维护一个count从 1 到 500 变化的变量,在循环结束之前,我使用填充输出数组

result(count,:) = blocks;

其中 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));

我无法弄清楚这不是二维数组的原因。非常感谢任何帮助。

谢谢

4

1 回答 1

1

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

于 2014-09-05T20:57:38.227 回答