Eu conservo memória no MATLAB declarando variáveis globais em vez de passá-las como argumentos?
Eu sou novo no MATLAB, não estava na descrição do trabalho e fui forçado a assumir a pessoa que escreveu e manteve o código que minha empresa usa. A vida é dura.
O cara do qual eu estou assumindo me disse que ele declarou todos os vetores de big data comoglobal
, para economizar memória. Mais especificamente, de modo que quando uma função chama outra função, ele não cria uma cópia dos dados quando a passa.
Isso é verdade? Eu leioEstratégias para Uso Eficiente da Memóriae diz que
Ao trabalhar com grandes conjuntos de dados, esteja ciente de que o MATLAB faz uma cópia temporária de uma variável de entrada se a função chamada modificar seu valor. Isso temporariamente dobra a memória necessária para armazenar a matriz, o que faz com que o MATLAB gere um erro se não houver memória suficiente disponível.
Diz algo muito semelhante emAlocação de memória para argumentos de #Function de matriz:
Quando você passa uma variável para uma função, na verdade você está passando uma referência para os dados que a variável representa. Contanto que os dados de entrada não sejam modificados pela função que está sendo chamada, a variável na função de chamada e a variável na função chamada apontam para o mesmo local na memória. Se a função chamada modificar o valor dos dados de entrada, o MATLAB fará uma cópia do array original em um novo local na memória, atualizará as cópias com o valor modificado e apontará a variável de entrada na função chamada para esse novo array.
Então, é verdade que usandoglobal
pode ser melhor? Parece um pouco desleixado declarar alegremente todos os dados grandes comoglobal
, em vez de se certificar de que nenhum dos códigos modifica seu argumento de entrada. Estou errado? Isso realmente melhora o uso de RAM?