8

我的理解是,Int 值是指向 thunk(双重间接)的指针,而未装箱的 Int# 只是指向 32/64 位 int 的指针。那是对的吗?指针如何编码它引用未装箱值的事实?

Haskell 标准规定 Int 是“至少具有 [-2^29 .. 2^29-1] 范围的固定精度整数类型” 。GHC 中是否有一些优化,其中那些额外的位用于消除间接性?

4

1 回答 1

13

GHC 文档有一些很好的信息。但基本上,您说Int值是指向 thunk 的指针是正确的。但是,未装箱值不是指向未装箱值的指针,它未装箱值本身。此外,Haskell 标准报告仅给出了范围的下限Int。IIRC, GHCInt的有超过 30 位。

我不认为 GHC 使用未装箱类型的额外位来存储任何元数据,但它确实使用指针位来这样做。有关详细信息,请参阅此页面。

于 2013-06-28T01:05:35.300 回答