मैं हास्केल (ज्यादातर जीएचसी के साथ) में कुछ डेटा प्रकार के मूल्य को संग्रहीत करने के लिए आवश्यक स्मृति की वास्तविक मात्रा कैसे प्राप्त कर सकता हूं? क्या रनटाइम पर इसका मूल्यांकन करना संभव है (उदा। जीएचसीआई में) या क्या इसके घटकों से कंपाउंड डेटा प्रकार की स्मृति आवश्यकताओं का अनुमान लगाना संभव है?हास्केल डेटा प्रकारों की मेमोरी पदचिह्न
data Uno = Uno a
data Due = Due a b
उदाहरण के लिए, इन मूल्यों को कैसे याद में कई बाइट पर कब्जा करते हैं:
सामान्य में, अगर प्रकार a
और b
की स्मृति आवश्यकताओं जाना जाता है, इस तरह के रूप बीजीय डेटा प्रकार के स्मृति भूमि के ऊपर क्या है?
1 :: Int8
1 :: Integer
2^100 :: Integer
\x -> x + 1
(1 :: Int8, 2 :: Int8)
[1] :: [Int8]
Just (1 :: Int8)
Nothing
मैं समझता हूं कि देरी कचरा संग्रह के कारण वास्तविक स्मृति आवंटन अधिक है। आलसी मूल्यांकन के कारण यह काफी अलग हो सकता है (और थंक आकार मूल्य के आकार से संबंधित नहीं है)। सवाल यह है कि, डेटा प्रकार दिया गया है, पूरी तरह से मूल्यांकन किए जाने पर इसकी कीमत कितनी मेमोरी लेती है?
मुझे लगता है कि स्मृति आंकड़े देखने के लिए जीएचसीआई में :set +s
विकल्प है, लेकिन यह स्पष्ट नहीं है कि एक मूल्य के मेमोरी पदचिह्न का अनुमान कैसे लगाया जाए।
धन्यवाद, साइमन। यह वही है जो मैं जानना चाहता था। – sastanin
शीर्षलेख दो शब्द नहीं है? टैग के लिए एक, और जीसी या मूल्यांकन के दौरान उपयोग के लिए अग्रेषण सूचक के लिए एक? तो क्या यह आपके कुल में एक शब्द नहीं जोड़ता? –
इसके मूल्य के आनुपातिक या इसके लॉगेरिथम के आनुपातिक? – solidsnack