我正在尝试分析我的应用程序。分析内存使用情况时-hc
RTS 选项,我注意到很多内存标记为“PINNED”。当与-hy
内存被标记为ARR_WORDS
.
该程序使用以下命令创建 2400×2400 双精度矩阵Data.Packed.Matrix
hmatrix 包中的模块,并且由于其中的元素应该存储在连续的内存中,所以我没有看到矩阵占用这么多空间的方法。
我的问题是:“PINNED”一词的实际含义是什么?还有没有办法获得有关内存使用原因和位置的更多信息?
有问题的整个源代码是在 GitHub 上 https://github.com/lubomir/machacek,如果有人对此感兴趣的话。然而,这远非最小的例子。
“固定”数据意味着垃圾收集器不允许移动它。例如,当通过 FFI 将数据传递到 C 函数时,这会有所帮助。您不希望 GC 在执行 C 调用时移动数据。
Soylent Green 给出了上面的相关链接(https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/GC/Pinned https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/GC/Pinned).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)