【发布时间】:2016-03-30 18:52:32
【问题描述】:
据我了解,MATLAB 在向其他函数发送参数时不能使用pass by reference。我正在做音频处理,我经常需要将波形作为参数传递给函数,而且因为 MATLAB 使用pass by value 来处理这些参数,所以当我这样做时它确实会占用大量 RAM。
我正在考虑使用global 变量作为将我的波形传递给函数的方法,但在我阅读的所有地方似乎普遍认为这是一个坏主意,对于代码组织和潜在的性能问题.. . 但我还没有真正阅读任何关于这可能如何影响性能的详细答案......
我的问题:在1)方面,使用全局变量(大小 > 100MB)将参数传递给 MATLAB 中的其他函数有什么负面影响性能和2) 一般代码组织和良好实践。
编辑: 从下面@Justin 的回答中可以看出,当您不修改函数中的参数时,MATLAB 有时会使用按引用传递!由此,我有一个关于全局变量性能的第二个相关问题:
使用全局变量会比使用pass by reference 函数参数慢吗?
【问题讨论】:
-
就良好实践而言,其中一个陷阱是您可能会突然覆盖在其他函数中的函数内部使用的变量。因此,可能很难跟踪更改,并且因此在函数之间来回切换可能会导致意外行为。如果您将全局变量称为
h、a等,这种情况尤其常见(当变量不是global时,这当然也会导致错误的阅读) -
This post on matlabtips.com 详细解释了不同类型的变量以及为什么使用
global通常不受欢迎。 -
相关:“GLOBAL could be very inefficient” 和 Don't use global, don't use eval。而Matlab在OOP的情况下可以use pass by reference。是的,全局变量会更慢(你自己测试一下),它们也会让你的代码更难维护和理解。
标签: performance matlab global