如何找到在 Haskell(主要是 GHC)中存储某种数据类型的值所需的实际内存量?是否可以在运行时评估它(例如在 GHCi 中),或者是否可以从其组件估计复合数据类型的内存需求?
一般来说,如果类型a
和内存需求b
已知,那么代数数据类型的内存开销是多少,例如:
data Uno = Uno a
data Due = Due a b
例如,这些值在内存中占用了多少字节?
1 :: Int8
1 :: Integer
2^100 :: Integer
\x -> x + 1
(1 :: Int8, 2 :: Int8)
[1] :: [Int8]
Just (1 :: Int8)
Nothing
我知道由于垃圾收集延迟,实际内存分配更高。由于惰性评估,它可能会有很大的不同(并且 thunk 大小与值的大小无关)。问题是,给定一个数据类型,它的值在完全评估时需要多少内存?
我发现 GHCi 中有一个:set +s
选项可以查看内存统计信息,但不清楚如何估计单个值的内存占用量。