2012-09-03 29 views
7

thể trùng lặp:
Memory footprint of Haskell data typesSử dụng bộ nhớ của nhà xây dựng trong Haskell

Khi giải các bài toán tổ hợp, tôi sẽ thường xuyên đại diện cho giải pháp như là một chuỗi bit, ví dụ. 1010100010110111000110 ... Bạn nhận được hình ảnh.

I figured rằng khi tôi sử dụng [Int] cho chuỗi bit, Int luôn dành cùng một lượng bộ nhớ, bất kể lớn như thế nào số lượng thực sự là (vì Int nó bị chặn, trái ngược với Integer), như máy tính chỉ nhớ đại diện bit, và String 's sẽ mất nhiều không gian hơn như xa như tôi biết.

Ý tưởng của tôi là sau đó sử dụng các kiểu dữ liệu

data Bits = Empty | Zero Bits | One Bits deriving (Eq,Ord,Show) 

Nhưng bao nhiêu bộ nhớ làm các nhà thầu Empty, ZeroOne sử dụng so với Int 's?

+2

Một 'Int' luôn là 32 hoặc 64 bit, do đó, nó không thể lưu trữ số lượng lớn tùy ý. 'Integer', mặt khác, là không bị chặn. – huon

+5

Không liên quan đến câu hỏi của bạn, nhưng có Data.Bits có nội dung bitfield – Squidly

+0

@dbaupp: Tôi biết rằng, đó là lý do tôi muốn nó so với chỉ 'Int''s – Undreren

Trả lời

10

Int chi phí hai từ trong bộ nhớ (#I constructor và #Int trường), dữ liệu Bits bạn có thể sử dụng chi phí khác nhau, ví dụ: Zero (One (Zero Empty)) sẽ có giá:

  1. Một từ cho Empty constructor
  2. Hai từ cho Zero Constructor and field
  3. Hai từ cho One Constructor và field
  4. Hai từ cho Zero Constructor và field

và tổng chi phí - 7 từ. Vì vậy, số lượng bộ nhớ cho dữ liệu của bạn có thể lớn hơn cho Int.

+0

Tôi không chắc chắn những gì bạn có nghĩa là "từ"? "Từ" là gì và làm cách nào để tính toán mức sử dụng bộ nhớ của nó? – Undreren

+4

Đó là một từ máy, đó là một 4 byte trong máy 32-bit và 8 byte in 64-bit. –

+0

Tôi nghĩ rằng tôi đã nhận được câu hỏi của tôi trả lời ở đây, kể từ khi một người nào đó là loại, đủ để đánh dấu câu hỏi của tôi như là một bản sao. – Undreren

Các vấn đề liên quan