Alternative to using global for a very large array

Hi
I have a quite large array of data (100s of MB) that I am using as a LUT in multiple functions. If I declare it as a parameter, it will be copied locally by each function, which is an unjustified waste of memory. The solution I am currently using is to define it as global. I know that globals are highly discouraged, but is there a smarter alternative for my case?

댓글 수: 1

As per isakson explained to you, you try to FIX something that does not exists and hurt your code.
MATLAB does not copy the matrix if you call it as parameter, or even assign it to new variable
BIG = rand(1e4);
B = BIG;
C = foo(BIG);
function C = foo(A)
C = A;
end
A, B, C use a shared-memory of data.
So remove this global and program normally as you would and let MATLAB does the work.
NOTE: However if you do this there is 2 big matrices in memory after the third statement
BIG = rand(1e4);
B = BIG;
B(1) = 10;

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

 채택된 답변

per isakson
per isakson 2019년 9월 17일
편집: per isakson 2019년 9월 17일

0 개 추천

"unjustified waste of memory" Matlab is smarter than that, see Avoid Unnecessary Copies of Data.
If LUT is look-up-table and the called function doesn't change the LUT-value no copies are made.
See also Memory Management for Functions and Variables. This blog is more that ten years and Matlab evolves, but it's worth reading.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Data Type Conversion에 대해 자세히 알아보기

제품

릴리스

R2017a

질문:

2019년 9월 16일

댓글:

2019년 9월 17일

Community Treasure Hunt

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

Start Hunting!

Translated by