Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 是否通过声明全局变量而不是将其作为参数传递来节省MATLAB中的内存?

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

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

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

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

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


回答:
以我的经验,只要没有代码修改大数据,无论使用全局变量还是输入自变量,内存使用都是一样的,就像Matlab文档所说的那样。 MathWorks员工在此博客文章中提供了更多信息。

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



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 03:12


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.