如何查找在Haskell中存儲某些數據類型值所需的實際內存量(主要是使用GHC)?是否可以在運行時對其進行評估(例如,在GHCi中)還是可以從組件中估計組合數據類型的內存需求?Haskell數據類型的內存佔用情況
在一般情況下,如果類型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
選項來查看內存統計信息,但不清楚如何估計單個值的內存佔用情況。
謝謝,西蒙。這正是我想知道的。 – sastanin 2010-07-15 15:19:26
是不是頭兩個字?一個用於標記,另一個用於GC或評估期間使用的轉發指針?那麼這不會爲你的總數增加一個詞嗎? – 2010-07-15 17:11:11
與它的值成正比或與其對數成正比嗎? – solidsnack 2010-07-15 17:25:33