在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
选项来查看内存统计信息,但不清楚如何估算单个值的内存占用。