我是通过声明变量全局而不是将它们作为参数传递来节省MATLAB中的内存吗?

Sha*_*mer 10 matlab memory-management

我是MATLAB的新手,它不在工作描述中,我被迫接管编写和维护我公司使用的代码的人.生活很艰难.

我接手的人告诉我,他宣称所有的大数据向量都是global为了节省内存.更具体地说,当一个函数调用另一个函数时,他在传递数据时不会创建数据的副本.

这是真的?我阅读了有效使用内存的策略,它说明了这一点

处理大型数据集时,请注意,如果被调用函数修改了其值,MATLAB将生成输入变量的临时副本.这会暂时使存储阵列所需的内存加倍,这会导致MATLAB在没有足够的内存时生成错误.

它说的内存分配对于数组#Function参数非常相似:

将变量传递给函数时,实际上是将引用传递给变量所代表的数据.只要输入数据不被被调用的函数修改,调用函数中的变量和被调用函数中的变量就指向内存中的相同位置.如果被调用函数修改了输入数据的值,则MATLAB将原始数组的副本复制到内存中的新位置,使用修改后的值进行更新,并将调用函数中的输入变量指向此新数组.

那么使用global可以更好吗?似乎有点草率地轻率地声明所有大数据global,而不是确保没有任何代码修改其输入参数.我错了吗?这真的可以改善RAM的使用吗?

Jit*_*sen 6

根据我的经验,只要没有代码修改大数据,无论你使用全局变量还是输入参数,内存使用都是一样的,就像Matlab文档所说的那样.更多信息在MathWorks员工的博客文章中.

在Matlab中有很多关于性能问题的民间传说,并非所有这些都是正确的.Matlab的内部已经发生了很大的变化.可能是在以前的版本中,最好使用全局变量.