Sono un po 'confuso dall'allocazione della memoria in Julia. I know from the FAQ che la cancellazione della memoria utilizzata da una grande variabile viene effettuata impostandola su qualcosa di piccolo (come 0) e quindi eseguendo gc()
.Confuso dall'assegnazione della memoria e dalla garbage collection in Julia
Tuttavia, sono un po 'confuso dal seguente. Creo un caso Float32
matrice:
@time A = rand(Float32, 10000, 10000);
time
indica che ~ 400MB di RAM è stato assegnato, e di Julia utilizzo di RAM aumenta di 400 MB. Questo ha senso.
ho quindi applicare fft
, ma non impegnano il risultato a qualsiasi variabile:
@time fft(A);
time
indica che ~ 800MB di RAM è stato assegnato, e di Julia utilizzo di RAM aumenta di 800 MB.
Tuttavia,, l'utilizzo della RAM rimane superiore di 1,2 GB rispetto all'inizio. E questo mi confonde, perché non ho equiparato alcuna variabile a fft(A)
, quindi mi aspetto che gli 800 MB allocati vengano immediatamente liberati dopo l'esecuzione dello fft
.
ho provato a correre gc
, pensando che Julia sarebbe rendersi conto che v'è stato un ulteriore 800MB di RAM che veniva utilizzato per niente:
gc();
Questo non fa nulla. L'utilizzo della RAM rimane a ~ 1,3 GB.
Tuttavia, i seguenti due linee,
A = 0;
gc();
libera tutte 1.2GB che è in uso, nonostante il fatto che sizeof(A)
è solo 400MB. Quindi la mia domanda è:
- Perché apparire come se un oggetto che è 400MB di dimensione (secondo
sizeof
) in realtà ha 1.2GB assegnato ad esso?
Dai un'occhiata a 'whos()' tra ogni comando. 'ans' prende un po 'di spazio. – rickhg12hs
@ rickhg12hs: Oh, quindi i dati vengono assegnati a 'ans', * anche se il comando termina con un punto e virgola *? Wow, ok, questo ha senso, anche se sembra contro-intuitivo per un principiante come me. Mentire a dirlo come risposta, quindi posso accettare? – DumpsterDoofus
La virgola è solo per sopprimere l'output, come in MATLAB (che l'ha ispirato). Non penso che questo caso sul quale ti sei imbattuto qui si presenti molto perché normalmente si assegnano i risultati a qualcosa, ma è interessante. – IainDunning