haskell中构造函数的内存使用情况

时间:2012-09-03 09:43:01

标签: memory haskell

  

可能重复:
  Memory footprint of Haskell data types

在解决组合问题时,我经常将解决方案表示为一个字符串,例如。 1010100010110111000110 ...你明白了。

我认为当我使用[Int]作为位字符串时,Int总是花费相同数量的内存,无论实际数字有多大(因为Int它有界限,与Integer相反,因为计算机只会记住位表示,而String会占用更多空间。

我的想法是使用数据类型

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

但构造函数EmptyZeroOneInt相比使用了多少内存?

1 个答案:

答案 0 :(得分:10)

Int在内存中花费两个字(#I构造函数和#Int字段),您的Bits数据可以使用各种费用,例如:Zero (One (Zero Empty))将成本:

  1. Empty构造函数
  2. 的一个词
  3. Zero构造函数和字段
  4. 的两个单词
  5. One构造函数和字段
  6. 的两个单词
  7. Zero构造函数和字段
  8. 的两个单词

    和总费用 - 7个字。 因此,您的数据的内存金额可能超过Int