【问题标题】:Using Globals instead of passing large arrays in Matlab在 Matlab 中使用 Globals 而不是传递大型数组
【发布时间】:2012-07-25 13:16:27
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-27
      • 2015-06-13
      • 2010-10-19
      • 1970-01-01
      • 2015-11-25
      • 2013-11-21
      • 2021-12-15
      • 2012-03-03
      相关资源
      最近更新 更多