Biorąc pod uwagę następujący kodCzy MATLAB "przeniesie" czy "skopiuje wartość zwracaną?
function [out] = doit()
out = [1,2,3,4,5,6];
end
tmp = doit();
Czy MATLAB skopiować pamięć out
do tmp
lub przenieść je bezpośrednio do tmp
?
Biorąc pod uwagę następujący kodCzy MATLAB "przeniesie" czy "skopiuje wartość zwracaną?
function [out] = doit()
out = [1,2,3,4,5,6];
end
tmp = doit();
Czy MATLAB skopiować pamięć out
do tmp
lub przenieść je bezpośrednio do tmp
?
W MATLABie nie ma nic podobnego do wskaźnika, są tam local workspaces.
Wygląda na to, że MATLAB jest inteligentny i wykonuje kopię i zwraca w razie potrzeby i przechodzi przez "wskaźnik" (bez wiedzy użytkownika), jeśli nie jest potrzebny. Jak zauważyli @Daniel i @zeeMonkeez, jest to omawiane na blogu Lorena here i odpowiada ona wyraźnie na temat zwracanych funkcji, gdy pamięć została utworzona wewnątrz here. Ogólny pomysł w tych postach brzmi: "MATLAB nie skopiuje, chyba że jest to potrzebne". Zasadniczo MATLAB usuwa Cię z zarządzania pamięcią.
Sidenote: Jest coś takiego jak wskaźniki, jeśli naprawdę trzeba to wykorzystać. Zobacz komentarz @ excaza.
[Możesz mieć wskaźniki (ish) w MATLAB] (http://www.matlabtips.com/how-to-point-at-in-matlab/) :) – excaza
@excaza dobrze, tak, technicznie prawda, ty potrafię z tym zrobić trochę dziwacznych rzeczy! Ale to nie jest przypadek ogólny. –
To nie jest prawda. Matlab używa copy-on-write, co oznacza, że 'out' nigdy nie zostanie zduplikowane. – Daniel