我正在尝试分析我的应用程序。在使用 -hc
RTS 选项分析内存使用情况时,我注意到很多内存标记为 PINNED。当使用 -hy
运行时,内存被标记为 ARR_WORDS
。
该程序使用 hmatrix 包中的 Data.Packed.Matrix
模块创建一个 2400×2400 的 double 矩阵,并且由于其中的元素应该存储在连续内存中,我没有看到矩阵占用这么多空间的方式。
我的问题是:PINNED 这个词实际上是什么意思?还有没有办法获得有关为什么以及在何处使用内存的更多信息?
有问题的整个源代码是on GitHub ,是否有人对此感兴趣。然而,它远非最小的例子。
最佳答案
“固定”数据意味着不允许垃圾收集器移动它。例如,这有助于通过 FFI 将数据传递给 C 函数。您不希望 GC 在 C 调用执行时移动数据。
Soylet Green 在上面提供了相关链接 (https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/GC/Pinned)。
关于haskell - Haskell程序的-hc配置文件中PINNED是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20478805/