最近,一些博客文章(例如计算哈希映射大小)讲解了如何推断常用容器类型的空间复杂度。现在我的问题是如何“看到”我的 GHC 版本选择哪种内存布局(取决于编译标志和目标架构)适用于奇怪的数据类型(构造函数),例如:
data BitVec257 = BitVec257 {-# UNPACK #-} !Word64
{-# UNPACK #-} !Word64
{-# UNPACK #-} !Bool
{-# UNPACK #-} !Word64
{-# UNPACK #-} !Word64
data BitVec514 = BitVec514 {-# UNPACK #-} !BitVec257
{-# UNPACK #-} !BitVec257
C语言中有sizeof
和offsetof
操作符,它们可以让我“看到”C结构体字段的大小和对齐方式。
我尝试查看GHC Core以寻找一些提示,但不知道该查找什么内容。有人能指点我正确的方向吗?