2012-01-17 70 views
2

当写将A = A + B分配新的内存?

A = A + B; 

甲乙beeing矩阵,将MATLAB执行此“就地”,即改变A中的元素,或将新的存储器被分配给存储结果?如果是这样,我该如何避免这种情况?

不知其原因是,如果,例如,一个写入

A = A + B + A^2; 

需要被多次访问原始数据,因此不能简单地通过第一加法被覆盖。

谢谢。

+0

你的意思是“因此不能简单地被第一次加法覆盖”。你能详细说明吗? – 2012-01-17 16:00:48

+3

'A + B'是一个元素操作,所以MATLAB即时引擎可以重新使用'A'来保存结果。在第二种情况下,'A^2'是一个矩阵乘法,并且计算单个元素需要访问“A”的整个行和列。基本上它需要访问原来的'A',这意味着我们不能指望一切就绪。总的来说,很难猜测MATLAB在这个级别上做了什么,因为它是故意没有记录的(部分原因是它可能会随着发布而改变,在某种意义上,它违背了使用低级实现细节的语言精神)。 – John 2012-01-17 16:19:23

+0

你的意思是A = A + B + A.^2? – Marc 2012-01-17 20:59:00

回答

5

我已经在我的电脑上使用系统监视器对它进行了测试。我注意到A=A+B没有分配新的内存,但A=A+B+A^2没有分配新的内存。

这很有意义,因为在C++中,编写没有内存分配的第一个代码很容易,但对于第二个代码是不可能的。

相关问题