如何找到在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的大小与值的大小无关)。问题是,在给定数据类型的情况下,充分评估其值会占用多少内存?
我发现:set +s
GHCi中有一个选项可以查看内存统计信息,但是目前尚不清楚如何估算单个值的内存占用量。