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