Czy zachowuję pamięć w MATLAB, deklarując zmienne globalne zamiast przekazywać je jako argumenty?

Jestem nowym użytkownikiem MATLAB-a, nie było go w opisie pracy i byłem zmuszony przejąć kontrolę nad osobą, która napisała i utrzymywała kod, którego używa moja firma. Życie jest trudne.

Facet, od którego się przejmuję, powiedział mi, że zadeklarował wszystkie wektory dużych danych jakoglobal, aby zaoszczędzić pamięć. Dokładniej mówiąc, gdy jedna funkcja wywołuje inną funkcję, nie tworzy kopii danych, gdy przekazuje ją.

Czy to prawda? czytamStrategie efektywnego wykorzystania pamięcii tak to mówi

Podczas pracy z dużymi zestawami danych należy pamiętać, że MATLAB tworzy tymczasową kopię zmiennej wejściowej, jeśli wywoływana funkcja modyfikuje jej wartość. Tymczasowo podwaja pamięć wymaganą do przechowywania tablicy, co powoduje, że MATLAB generuje błąd, jeśli wystarczająca ilość pamięci jest niedostępna.

Mówi coś bardzo podobnegoPrzydział pamięci dla argumentów funkcji # Array:

Kiedy przekazujesz zmienną do funkcji, faktycznie przekazujesz odwołanie do danych, które reprezentuje zmienna. Dopóki dane wejściowe nie są modyfikowane przez wywoływaną funkcję, zmienna w funkcji wywołującej i zmienna w wywoływanej funkcji wskazują tę samą lokalizację w pamięci. Jeśli wywołana funkcja modyfikuje wartość danych wejściowych, MATLAB tworzy kopię oryginalnej tablicy w nowej lokalizacji w pamięci, aktualizuje tę kopię o zmodyfikowaną wartość i wskazuje zmienną wejściową w wywoływanej funkcji na tę nową tablicę.

Czy to prawda, że ​​używanieglobal może być lepiej? Wydaje się, że trochę niechlujnie deklaruje wszystkie duże dane jakoglobal, zamiast upewnić się, że żaden kod nie modyfikuje swojego argumentu wejściowego. Czy się mylę? Czy to naprawdę poprawia wykorzystanie pamięci RAM?

questionAnswers(4)

yourAnswerToTheQuestion