MATLAB MEX 文件中的大小限制

Size limit in MATLAB MEX-files

我是 Matlab mex 的新手。我正在尝试编写一个 mex 函数,该函数反过来将从 .cpp 文件中获取结构数据并在 Matlab 中使用它。

我才知道 plhs 和 prhs 是指向数组的指针,数组分别保存输出数据和输入数据,每个元素都是 mxArray 类型。

由于结构大小可能很大,plhs 和 prhs 数组保存数据是否有最大大小限制?如果是这样,有哪些替代方法?

据我研究,可以处理的数组大小取决于 API 您编译 mex 文件所使用的。您可以通过在编译指令中添加相应的标志来选择 API。详细信息在 "api-release specific API" 下的 matlab documentation 中。

有 4 个选项可用:-R2017b (default) -R2018a -largeArrayDims-compatibleArrayDims

在数组大小方面 -R2017b (default) -R2018a-largeArrayDims 使用 Large-array-handling API 根据 matlab mex documentation can handle arrays over 231-1 and, according to the API documentation 应该可以处理最多 248-1 个元素的数组和最多 248-2.

个元素的稀疏数组

只有最后一个选项,-compatibleArrayDims 不会处理大于 231-1

的数组

除了数组大小之外,这些选项还会改变一些数据类型的处理方式,特别是复杂类型和图形对象。

简而言之:

  • -R2017b (default):每个数组 248-1 个元素
  • -R2018a:每个数组 248-1 个元素
  • -largeArrayDims:每个数组 248-1 个元素
  • -compatibleArrayDims 231-1 个元素每个数组

最后,如果你想处理更大的对象,我看到的解决方案是将你的结果写入代码的 c 部分的文件(例如 .txt 或 .csv),然后在 matlab 部分读回它们整体或分块。

希望这对您有所帮助。我是新来的,所以如果我犯了错误或无视礼仪,请随时纠正我。