8

私の理解では、Int 値はサンク (二重間接参照) へのポインターであり、ボックス化されていない Int# は 32/64 ビット int への単なるポインターです。あれは正しいですか?ポインターは、ボックス化されていない値を参照しているという事実をどのようにエンコードしますか?

Haskell 標準では、Int は「少なくとも範囲 [-2^29 .. 2^29-1] の固定精度整数型」であると規定されています。これらの余分なビットを使用して間接性を排除する GHC の最適化はありますか?

4

1 に答える 1

13

The GHC documentation has some good information. But basically, you're correct in saying that an Int value is a pointer to a thunk. However, an unboxed value is not a pointer to the unboxed value, it is the unboxed value itself. Also, the Haskell standard report merely gives the lower limit on the range of Int. IIRC, GHC Int's have more than 30-bits.

GHC がボックス化されていない型の余分なビットを使用してメタデータを格納するとは思いませんが、ポインターのビットを使用してそうしています。詳しくはこちらのページをご覧ください。

于 2013-06-28T01:05:35.300 に答える