3

我正在使用大型数组(每个大约 70 MB)并且担心将它们传递给函数。我的理解是 Matlab 使用按值传递函数参数,为被调用函数制作本地副本。

作为一种肮脏的解决方法,我一直将大型数组声明为全局数组,并在计算完成时手动取消分配它们。

我的问题:有没有办法在 Matlab 中使用指针?这就是我在 C/C++ 中的做法。如果没有,还有其他更节省内存的方法吗?我读过全局变量通常是一个坏主意。

4

2 回答 2

1

@mutzmatron 在评论中回答了我的问题,所以这是一个转发:

实际上Matlab通过引用传递,除非它决定它需要通过值传递......请参阅此处的解释: http://www.mathworks.com/matlabcentral/answers/...

于 2013-03-22T18:03:08.340 回答
1

我还到处读到全球通常也是一个坏主意。而且,具体来说,我不同意。每个工具都有自己的用途。

我一直致力于优化代码,并发现在所有“更好的选择”中,在我的应用程序中使用 global 可以将代码的执行速度提高 20%!

该代码用于处理 GPS 信号……所有定义 GPS 信号某些特征的函数都使用了许多参数。此外,还有许多嵌套函数和对这些函数的迭代调用。

将单个参数传递给函数可能比该函数访问全局变量要快一些。在我的例子中,每个函数访问它需要的 3 或 4 个全局变量比将所有 10 个参数一直传递到嵌套函数链要快得多。

使用全局变量 8.5 秒的 tic-toc 比使用参数传递或嵌套函数的 10.5 秒快。那么,坏主意?我要表演,谢谢。

我的观点?如果全局变量工作得更好,请使用全局变量。无论哪种方式都可以尝试...但是当您更改函数中的大数组时,该数组现在会在本地复制,而不仅仅是被引用。我宁愿查找一个全局然后制作一个 70MB 的副本。

在低级语言中,我同意尽可能避免使用全局变量……但这些语言提供指针和常量。MATLAB 并不是为真正知道如何编程和如何优化的人设计的。如果口译员没有为您优化;看来你是SOL。

于 2015-03-28T00:02:11.273 回答