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

 채택된 답변

Stephen23
Stephen23 2019년 3월 19일
편집: Stephen23 2019년 3월 19일

1 개 추천

"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.

댓글 수: 3

Robin L.
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.
How would you recursively call a function?
I need to make my own version of bwconncomp() using the flood fill algorithm.
[ioaImgConnComp] = setImgFloodFill(ioaImgConnComp, ivCoordX_pix, ...)
Without pass by reference, MATLAB keeps making a copy of the input image array (e.g., ioaImgConnComp), which is named the same as the output argument.
Pass by reference or point enables creating a recursive function easy and intelligent. What equivalent techniques are available on MATLAB?
Thanks.
Stephen23
Stephen23 2019년 10월 6일
편집: Stephen23 2019년 10월 6일
@Han Yoo: recursive functions appear to create copies of their inputs (this might change depending on MATLAB version, etc). The simple solution to prevent this occuring is to write the recursive function as a nested function and define those variable/s in the "parent" workspace. Then all calls of the recursive function will access exactly the same variable/s in memory.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Performance and Memory에 대해 자세히 알아보기

제품

릴리스

R2018a

질문:

2019년 3월 19일

편집:

2019년 10월 6일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by