ฉันจะหาจำนวนหน่วยความจำจริงที่ต้องใช้ในการจัดเก็บค่าของข้อมูลบางประเภทใน 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 เพื่อดูสถิติหน่วยความจำ แต่ยังไม่ชัดเจนว่าจะประมาณค่าหน่วยความจำของค่าเดียวได้อย่างไร