首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Foreign.Storable中的超大布尔块

Foreign.Storable中的超大布尔块
EN

Stack Overflow用户
提问于 2017-01-21 17:23:39
回答 2查看 131关注 0票数 4

我明白了:

代码语言:javascript
复制
GHCi> import Foreign.Storable
GHCi> sizeOf False
4

我希望它是1,但我认为它可能带有一些指针或其他迫使它变得更大的东西。但这似乎不是必要的:

代码语言:javascript
复制
GHCi> import Data.Word
GHCi> sizeOf (0 :: Word8)
1

是什么迫使Bool存储这么大的空间?这似乎是对内存的巨大浪费。

EN

回答 2

Stack Overflow用户

发布于 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实例只使用了一个字节。

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

票数 3
EN

Stack Overflow用户

发布于 2017-01-21 18:29:37

source中,我们有:

代码语言:javascript
复制
instance Storable Bool where
   sizeOf _ = sizeOf (undefined::HTYPE_INT)

HsBaseConfig.h中,HTYPE_INT被定义为:

代码语言:javascript
复制
/* Define to Haskell type for int */
#define HTYPE_INT Int32

这可能会给出结果4,尽管我认为这个值应该是特定于实现的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41777675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档