MATLAB Answers

Robin L.
0

Passing by reference vs value

Robin L.
さんによって質問されました 2019 年 3 月 19 日
最新アクティビティ Robin L.
さんによって コメントされました 2019 年 3 月 19 日
Hello !
Hope you are all doing fine.
What is better ?
clear; clc;
% let's consider a and b, some matrix
tic;
multiply_tab(a, b);
toc;
tic;
multiply(max(max(c)),min(min(d)));
toc;
function result = multiply(max_a, min_b)
result = max_a * min_b;
end
function result = multiply_tab(a, b)
result = max(max(a)) * min(min(b));
end
In fact, I would like to know if Matlab passes array parameters as a reference of the array in the memory or a new copy of the array.
Because I try to get my code the most efficient, finding the cleanest way between human readability and high computing speed.
Thanks !
Robin

  0 件のコメント

サインイン to comment.

製品


リリース

R2018a

1 件の回答

Stephen Cobeldick
回答者: Stephen Cobeldick
2019 年 3 月 19 日
編集済み: Stephen Cobeldick
2019 年 3 月 19 日
 採用された回答

"Passing by reference vs value"
Neither. MATLAB is more intelligent that either of those. MATLAB uses something called "copy on write", which essentially means that is passes by reference unitl the data is changed, at which point it makes a copy. This is explained in the blogs: "MATLAB makes copies of arrays it passes only when the data referred to changes"
What does this mean for your code? In 99.99% of cases you should just use the simplest syntax, i.e. simply pass the variables and let MATLAB's memory management take care of how the variables are stored. In your example just pass a and b, no copies will be made.
In any case, TMW discourages writing code to take advantage of specific JIT features. The philosophy is that the JIT engine is written to optimize your code, not the other way around.

  1 件のコメント

Robin L.
2019 年 3 月 19 日
Thank a lot Stephen Cobeldick for your explanations !
I will use the simplest syntax : passing the variables as parameters and let Matlab manage how the variables are stored.

サインイン to comment.



Translated by