Haskell'de (çoğunlukla GHC ile) bazı veri türlerinin bir değerini depolamak için gereken gerçek bellek miktarını nasıl bulabilirim? Çalışma zamanında değerlendirmek mümkün mü (örneğin GHCi'de) veya bileşenlerinden bir bileşik veri türünün bellek gereksinimlerini tahmin etmek mümkün mü?
Genelde, türleri bellek gereksinimleri varsa a
ve b
bilinir gibi cebirsel veri türleri bellek havai nedir:
data Uno = Uno a
data Due = Due a b
Örneğin, bu değerler bellekte kaç bayt yer kaplar?
1 :: Int8
1 :: Integer
2^100 :: Integer
\x -> x + 1
(1 :: Int8, 2 :: Int8)
[1] :: [Int8]
Just (1 :: Int8)
Nothing
Gecikmiş çöp toplama nedeniyle gerçek bellek tahsisinin daha yüksek olduğunu anlıyorum. Tembel değerlendirme nedeniyle önemli ölçüde farklı olabilir (ve büyük boyut, değerin boyutuyla ilgili değildir). Soru, bir veri türü verildiğinde, tam olarak değerlendirildiğinde değeri ne kadar bellek alır?
:set +s
GHCi'de bellek istatistiklerini görmek için bir seçenek olduğunu buldum , ancak tek bir değerin bellek ayak izinin nasıl tahmin edileceği net değil.