我对 Julia 中的内存分配有点困惑。我从常见问题解答中知道 http://julia.readthedocs.org/en/latest/manual/faq/清除大变量使用的内存是通过将其设置为较小的值(例如 0)然后运行来完成的gc()
.
但是,我对以下内容感到有点困惑。我创建一个随机的Float32
array:
@time A = rand(Float32, 10000, 10000);
time
表示分配了 ~400MB 的 RAM,Julia 的 RAM 使用量增加了 400MB。这是有道理的。
然后我申请fft
,但不要将结果绑定到任何变量:
@time fft(A);
time
表示分配了 ~800MB 的 RAM,Julia 的 RAM 使用量增加了 800MB。
However,RAM 使用量仍比开始时高 1.2GB。这让我很困惑,因为我没有将任何变量等同于fft(A)
,所以我预计分配的 800MB 将在fft
被处决。
我试着跑gc
,认为 Julia 会意识到有额外的 800MB RAM 被白白使用:
gc();
这没有任何作用。 RAM 使用量保持在约 1.3GB。
然而,下面两行,
A = 0;
gc();
释放所有正在使用的 1.2GB,尽管事实上sizeof(A)
只有400MB。所以我的问题是:
- 为什么它看起来像一个大小为 400MB 的对象(根据
sizeof
)实际上有1.2GB分配给它?
每个命令都会返回一些内容,即使它只是nothing
. ans
分配给每个返回的对象,即使没有直接分配并且命令以分号结尾。
** EDIT** [Julia 版本 ≥ v0.7.0 的更新信息]
Use varinfo()
对于 Julia v0.7.0 及更高版本(whos()
对于 Julia v0.6.4 及更低版本),在监视分配的命令和分配的空间之间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)