我明白了:
GHCi> import Foreign.Storable
GHCi> sizeOf False
4我希望它是1,但我认为它可能带有一些指针或其他迫使它变得更大的东西。但这似乎不是必要的:
GHCi> import Data.Word
GHCi> sizeOf (0 :: Word8)
1是什么迫使Bool存储这么大的空间?这似乎是对内存的巨大浪费。
发布于 2017-10-17 15:39:12
从GHC-8.2/base-4.10开始,通过Storable存储的类型CBool只需要一个字节。
https://hackage.haskell.org/package/base-4.10.0.0/docs/Foreign-C-Types.html#t:CBool
或者,还有一个新的包bool8。它提供了一个围绕Bool的包装器类型,并且它的Storable实例只使用了一个字节。
发布于 2017-01-21 18:29:37
在source中,我们有:
instance Storable Bool where
sizeOf _ = sizeOf (undefined::HTYPE_INT)在HsBaseConfig.h中,HTYPE_INT被定义为:
/* Define to Haskell type for int */
#define HTYPE_INT Int32这可能会给出结果4,尽管我认为这个值应该是特定于实现的。
https://stackoverflow.com/questions/41777675
复制相似问题