हास्केल में कुछ डेटा प्रकार (ज्यादातर जीएचसी के साथ) के मूल्य को स्टोर करने के लिए आवश्यक मेमोरी की वास्तविक मात्रा मुझे कैसे मिल सकती है? क्या रनटाइम पर इसका मूल्यांकन करना संभव है (जैसे जीएचसीआई में) या क्या इसके घटकों से यौगिक डेटा प्रकार की स्मृति आवश्यकताओं का अनुमान लगाना संभव है?
सामान्य तौर पर, यदि स्मृति प्रकार की आवश्यकताएं 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 में एक विकल्प है, लेकिन यह स्पष्ट नहीं है कि किसी एकल मान के मेमोरी फ़ुटप्रिंट का अनुमान कैसे लगाया जाए।