7

可能重复:
Haskell 数据类型的内存占用

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

我想当我[Int]用于位字符串时,Int总是花费相同数量的内存,无论实际数字有多大(因为Int它是有界的,与 相比Integer),因为计算机只记住位表示,并且String's 会据我所知,占用更多空间。

我的想法是使用数据类型

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

但是与's相比,构造函数和使用Empty多少Zero内存?OneInt

4

1 回答 1

10

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

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

和总成本 - 7 个字。因此,您的数据的内存量可能超过Int.

于 2012-09-03T09:58:09.617 回答