2012-09-03 29 views
7

可能重複:
Memory footprint of Haskell data types內存使用

在解決組合問題,我會經常代表解決方案作爲一個位字符串,如。 1010100010110111000110 ...你得到的照片。

我想,當我使用[Int]的比特串,Int總是花費相同的內存量,無論數量實際上是多大(因爲Int它爲界,而相比之下,Integer),由於計算機只記得據我所知,位表示和String將佔用更多的空間。

我的想法是再使用的數據類型

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

但多少內存?建設者EmptyZeroOne使用相比Int的?

+2

一個'Int'始終爲32或64位,所以它不能存儲任意大的數字。另一方面,「整數」是無界的。 – huon

+5

無關你的問題,但已位域東西 – Squidly

+0

@dbaupp Data.Bits:我知道,這就是爲什麼我想它相比,只有'Int'的 – Undreren

回答

10

Int費用內存中的兩個詞(#I構造和#Int場),您Bits數據可以使用各種成本,例如:Zero (One (Zero Empty))將花費:

  1. ,一個詞Empty構造
  2. 兩個單詞Zero構造和領域One構造
  3. 兩個詞和現場
  4. 兩個詞Zero構造函數和字段

和總成本 - 7個單詞。 因此,您的數據的內存量可能會超過Int

+0

我不確定你的意思是「單詞」?什麼是「單詞」以及如何計算內存使用量? – Undreren

+4

這是一個機器字,它是32位機器中的4個字節,64位中的8個字節。 –

+0

我想我在這裏回答了我的問題,因爲有人非常友好地將我的問題標記爲重複。 – Undreren