2012-01-17 14 views
2

A = A + Bは新しいメモリを割り当てますか?

A = A + B; 

A及びB beeingて行列を書き込み、MATLABは、これは、「インプレース」、すなわちAの要素を変更し実行する、または新しいメモリは、結果を格納するために割り当てられるだろうか?もしそうなら、どうすればそれを避けることができますか?

かしら理由は、例えば、一方が

A = A + B + A^2; 

を書き込む場合は、元のデータが複数回アクセスする必要があり、従って、単に最初の添加によって上書きされないことです。

ありがとうございます。

+0

「最初の追加で上書きすることはできません」とはどういう意味ですか?あなたは精緻化できますか? –

+3

'A + B'は要素単位の操作であるため、MATLABジャストインタイムエンジンは結果を保持するために' A'を再利用できます。第2の場合、「A^2」は行列乗算であり、単一の要素を計算するためには、「A」の行と列全体にアクセスする必要がある。基本的には元の 'A'にアクセスする必要があります。つまり、すべての処理を期待できません。一般に、MATLABが意図的に文書化されていないので、このレベルでMATLABが何をしているのかを推測するのは難しいです(一部ではリリースによって変更される可能性がありますが、低レベルの実装の詳細では言語の精神に反します)。 – John

+0

A = A + B + A.^2の意味ですか? – Marc

答えて

5

システムモニタを使用して自分のコンピュータでテストしました。 A=A+Bは新しいメモリを割り当てませんが、A=A+B+A^2は新しいメモリを割り当てません。

C++ではメモリ割り当てなしで最初のコードを書くのは簡単ですが、2番目のコードでは不可能です。

関連する問題