我正在尝试描述我的应用程序。在使用-hc
RTS选项分析内存使用情况时,我注意到大量内存标记为PINNED。使用-hy
运行时,内存标记为ARR_WORDS
。
该程序使用hmatrix包中的Data.Packed.Matrix
模块创建2400×2400的双精度矩阵,由于其中的元素应存储在连续内存中,我看不到矩阵占用的方法这么多空间。
我的问题是:PINNED这个词究竟是什么意思?还有一种方法可以获得有关使用内存的原因和位置的更多信息吗?
有问题的整个源代码是on GitHub,如果有人对它感兴趣的话。但是,它距离最小的例子还很远。
答案 0 :(得分:8)
“固定”数据意味着不允许垃圾收集器移动它。例如,这有助于通过FFI将数据传递给C函数。在C调用执行期间,您不希望GC移动数据。
Soylet Green给出了上面的相关链接(https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/GC/Pinned)。