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



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

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

我的问题:有没有一种方法可以在Matlab中使用指针?这就是我在C/C++中的操作方式。如果没有,还有其他更有效的内存方法吗?我读到过全球化通常是个坏主意。

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

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

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

我一直在优化代码,并发现,在所有提供的"更好的选项"中,在我的应用程序中使用global可以将代码的执行速度提高整整20%!

该代码用于处理GPS信号。。。存在由定义GPS信号的某些特性的所有功能共同使用的多个参数。此外,还有许多嵌套函数和对这些函数的迭代调用。

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

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

我的观点?如果全局变量工作得更好,请使用全局变量。不管怎样都试试。。。但是,当您更改函数中的大数组时,该数组现在会被本地复制,而不仅仅是被引用。我宁愿查找一个全局文件,然后制作一个70MB的副本。

在较低级别的语言中,我同意尽可能避免全局变量。。。但这些语言提供了指针和常量。MATLAB并不是为那些真正知道如何编程和如何优化的人设计的。如果解释器没有为您进行优化;看起来你就是SOL。

相关内容

  • 没有找到相关文章