gpt4 book ai didi

memory-management - 对 Julia 中的内存分配和垃圾收集感到困惑

转载 作者:行者123 更新时间:2023-12-03 23:50:54 26 4
gpt4 key购买 nike

我对 Julia 的内存分配有点困惑。我 know from the FAQ清除大变量使用的内存是通过将其设置为较小的值(如 0)然后运行 ​​gc() 来完成的。 .

但是,我对以下内容有些困惑。我创建了一个随机 Float32大批:

@time A = rand(Float32, 10000, 10000);
time表示分配了约 400MB 的 RAM,而 Julia 的 RAM 使用量增加了 400MB。这是有道理的。

然后我申请 fft ,但不要将结果绑定(bind)到任何变量:
@time fft(A);
time表示分配了大约 800MB 的 RAM,而 Julia 的 RAM 使用量增加了 800MB。

但是,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被分配给每个返回的对象,即使没有直接分配,即使命令以分号结尾。

    ** 编辑 ** [Julia 版本≥ v0.7.0 的更新信息]

    使用varinfo()对于 Julia v0.7.0 及更高版本(whos() 对于 Julia v0.6.4 及更低版本),在监视分配和分配空间的命令之间。

    关于memory-management - 对 Julia 中的内存分配和垃圾收集感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25728040/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com