PDA

查看完整版本 : 是否通过声明全局变量而不是将其作为参数传递来节省MATLAB中的内存?


poster
2019-12-10, 16:49
我不是MATLAB的新手,它不在职位描述中,所以我被迫接任了编写和维护公司使用的代码的人员。生活艰难。

我要接管的那个人告诉我,他宣布将所有大数据向量都设为global ,以节省内存。更具体地说,这样,当一个函数调用另一个函数时,他在传递数据时不会创建数据的副本。

这是真的?我阅读了有效使用内存的策略 (http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/matlab_prog/brh72ex-25.html) ,它说

处理大型数据集时,请注意,如果被调用函数修改了输入变量的值,则MATLAB会为其复制一个临时变量。这会暂时使存储数组所需的内存增加一倍,如果没有足够的内存,则会导致MATLAB生成错误。

它说的是与数组#Function参数的内存分配 (http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/brh72ex-2.html#brh72ex-13)非常相似的内容:

当您将变量传递给函数时,实际上是在传递对变量代表的数据的引用。只要输入数据不被调用函数修改,调用函数中的变量和调用函数中的变量就指向内存中的同一位置。如果被调用函数修改了输入数据的值,则MATLAB将在内存中的新位置复制原始数组,并使用修改后的值更新该副本,然后将被调用函数中的输入变量指向该新数组。

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


回答:
以我的经验,只要没有代码修改大数据,无论使用全局变量还是输入自变量,内存使用都是一样的,就像Matlab文档所说的那样。 MathWorks员工在此博客文章中提供 (http://blogs.mathworks.com/loren/2006/05/10/memory-management-for-functions-and-variables/)了更多信息。

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



更多&回答... (https://stackoverflow.com/questions/1258761)