外国的大型Bool.Storable

时间:2017-01-21 09:23:39

标签: haskell memory

我明白了:

GHCi> import Foreign.Storable
GHCi> sizeOf False
4

我预计它会是1.但我认为它可能带有一些指针或某种东西迫使它变得更大。但似乎没有必要:

GHCi> import Data.Word
GHCi> sizeOf (0 :: Word8)
1

是什么迫使Bool存储这么大?这似乎是对记忆的巨大浪费。

2 个答案:

答案 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实例仅使用一个字节。

https://hackage.haskell.org/package/bool8

答案 1 :(得分:1)

source开始,我们有:

instance Storable Bool where
   sizeOf _ = sizeOf (undefined::HTYPE_INT)

HTYPE_INTHsBaseConfig.h中定义为:

/* Define to Haskell type for int */
#define HTYPE_INT Int32

这可以给你结果4,虽然我相信这个值应该是特定于实现的。