Як я можу знайти фактичний об'єм пам'яті, необхідний для зберігання значення певного типу даних у 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
Я розумію, що фактичне розподілення пам’яті вище через затримку збору сміття. Це може суттєво відрізнятися через ледачу оцінку (і розмір грона не пов'язаний з величиною значення). Питання полягає в тому, з урахуванням типу даних, скільки пам'яті займає її значення при повному оцінці?
Я виявив, що :set +s
в GHCi є можливість бачити статистику пам'яті, але незрозуміло, як оцінити слід пам'яті одного значення.