matlab子函式執行完成後是怎麼釋放記憶體的?
(出處: matlab中文論壇)
子函式(不只是本地函式)是可以共享主函式的空間的,例如這裡的a,b函式他們的workspace是共享的,如果在a中呼叫b,可以不用把引數當做輸入傳入b即可在b中使用
funciton a
...function b
...end
end另外matlab並沒有給很多在記憶體管理上的自由,而且內部也有自己的優化。所以即使你不採取什麼措施,matlab內部的jit等機制也會盡量優化記憶體管理,避免很多不必要的操作。多數情況下,matlab鼓勵按照正常自然的方式去程式設計,而不是為了某些可能的收益採用古怪且難以理解的方式去程式設計,如果真的非常在乎效能,建議還是用底層一些的編譯性語言
你沒有聽明白我的意思,我告訴你的意思就是a,b會共享工作空間,所以如果反覆呼叫同乙個變數,那麼就把這個變數在a中建立,則在b中可以直接使用,例如這裡的s和i:
function s = a(n)
s = zeros(n,1);
for i = 1:n
bend
function b
s(i) = i;
endend
另外,不建議使用變長陣列,應該在最初就為變數宣告正好或足夠的空間,例如這裡的s = zeros(n,1),並且在後續過程中不改變s的大小
另外你對記憶體碎片的想法只是你對matlab記憶體管理的乙個猜想,可能是正確的,但也可能不是,matlab自己有很多優化機制避免糟糕的記憶體利用,即使你不採用共享記憶體空間的手段,matlab也未必就會每次為b建立新的空間,而造成記憶體碎片;而更有可能會自動採用更合理的方式處理
matlab記憶體管理
用 matlab 進行大規模科學計算或 時,記憶體是乙個需要時常注意的問題。當你寫的 matlab 程式跳出 out of memory 時,以下幾點措施是需要優先考慮的解決方法 1.確保記憶體的連續性 matlab 中陣列必須占用連續分配的記憶體段,當無法為新建的陣列分配連續的記憶體段的時候,ou...
MATLAB記憶體變數的管理
1.為陣列賦值 利用連續的記憶體分配。但是陣列型別和維數作為陣列的頭資訊儲存在其他的地方。兩者沒有存放在同一連續的記憶體區域 2.刪除陣列中的元素 先移除陣列元素,後壓縮原來分配給陣列的記憶體空間。3.維陣列增加元素 觀察陣列所在的連續區域中是否可以增加新元素。如果可以容納新增加的陣列元素則僅需要擴...
matlab占用太多記憶體 Matlab高效程式設計技巧
用過matlab的同學應該都知道,matlab的慢是出了名的,但是再慢也有優化的方式,下面我們給出幾個matlab程式設計中常用的優化技巧。在講優化方法之前,首先要說的就是matlab中用tic toc的方式來計算執行時間,這是個常識。當然,想統計具體的耗時,可以用profile工具。向量化操作 這...