在解决组合问题时,我经常将解决方案表示为一个字符串,例如。 1010100010110111000110 ...你明白了。
我认为当我使用[Int]
作为位字符串时,Int
总是花费相同数量的内存,无论实际数字有多大(因为Int
它有界限,与Integer
相反,因为计算机只会记住位表示,而String
会占用更多空间。
我的想法是使用数据类型
data Bits = Empty | Zero Bits | One Bits deriving (Eq,Ord,Show)
但构造函数Empty
,Zero
和One
与Int
相比使用了多少内存?
答案 0 :(得分:10)
Int
在内存中花费两个字(#I
构造函数和#Int
字段),您的Bits
数据可以使用各种费用,例如:Zero (One (Zero Empty))
将成本:
Empty
构造函数Zero
构造函数和字段One
构造函数和字段Zero
构造函数和字段和总费用 - 7个字。
因此,您的数据的内存金额可能超过Int
。