我对朱莉娅的记忆分配感到有些困惑。清除大变量使用的内存的know from the FAQ是通过将其设置为小(如0)然后运行gc()
来完成的。
但是,我对以下内容感到有些困惑。我创建了一个随机的Float32
数组:
@time A = rand(Float32, 10000, 10000);
time
表示分配了大约400MB的RAM,而Julia的RAM使用量增加了400MB。这是有道理的。
然后我应用fft
,但不要将结果绑定到任何变量:
@time fft(A);
time
表示分配了大约800MB的RAM,而Julia的RAM使用量增加了800MB。
然而,RAM使用率仍然比开始时高1.2GB。这让我感到困惑,因为我并没有将任何变量等同于fft(A)
,所以我希望在fft
执行后立即释放800MB的分配。
我试图运行gc
,认为Julia会意识到还有800MB的RAM没有被使用:
gc();
这没有任何作用。 RAM使用率保持在~1.3GB。
但是,以下两行,
A = 0;
gc();
释放所有正在使用的1.2GB,尽管sizeof(A)
只有400MB。所以我的问题是:
sizeof
)实际上分配了1.2GB?