使用Globals而不是在Matlab中传递大型数组

时间:2012-07-26 21:01:54

标签: matlab global-variables parameter-passing pass-by-reference large-data

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

我一直致力于优化代码并找到所有更好的选项"在我的应用程序中使用全局代码,可以将代码的执行速度提高20%!

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

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

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

我的观点?如果全局变量更好,则使用全局变量。尝试它的方式......但是当你在一个函数中更改大数组时,该数组现在被复制到本地而不是被引用。我宁愿查找全局,然后制作70MB的副本。

在低级语言中,我同意尽可能避免使用全局变量......但这些语言提供了指针和常量。对于实际知道如何编程和如何优化的人来说,MATLAB并不适用。如果口译员没有为您优化;它似乎只是你的SOL。