盒装和非盒装整数的内存布局?

时间:2013-06-28 00:59:00

标签: haskell ghc

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

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

1 个答案:

答案 0 :(得分:13)

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

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