我明白了:
GHCi> import Foreign.Storable
GHCi> sizeOf False
4
我预计它会是1.但我认为它可能带有一些指针或某种东西迫使它变得更大。但似乎没有必要:
GHCi> import Data.Word
GHCi> sizeOf (0 :: Word8)
1
是什么迫使Bool
存储这么大?这似乎是对记忆的巨大浪费。
答案 0 :(得分:2)
从GHC-8.2 / base-4.10开始,类型CBool
在通过Storable
存储时只需要一个字节。
https://hackage.haskell.org/package/base-4.10.0.0/docs/Foreign-C-Types.html#t:CBool
或者,有新包bool8
。它提供Bool
周围的包装类型,其Storable
实例仅使用一个字节。
答案 1 :(得分:1)
从source开始,我们有:
instance Storable Bool where
sizeOf _ = sizeOf (undefined::HTYPE_INT)
HTYPE_INT
在HsBaseConfig.h中定义为:
/* Define to Haskell type for int */
#define HTYPE_INT Int32
这可以给你结果4,虽然我相信这个值应该是特定于实现的。