Как я могу найти фактический объем памяти, необходимый для хранения значения некоторого типа данных в 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
Я понимаю, что фактическое распределение памяти выше из-за задержки сбора мусора. Это может быть значительно отличаться из-за ленивой оценки (и размер танка не связан с размером значения). Вопрос в том, что, учитывая тип данных, сколько памяти занимает его значение при полной оценке?
Я нашел, что есть опция :set +s
в GHCi, чтобы увидеть статистику памяти, но неясно, как оценить размер памяти одного значения.
Спасибо, Саймон. Это именно то, что я хотел знать. – sastanin
Разве это не заголовок два слова? Один для тега и один для указателя пересылки для использования во время GC или оценки? Разве это не добавит вам одного слова? –
Пропорционально его значению или пропорционально его логарифму? – solidsnack