为什么erlang整数使用28位?

为什么erlang整数使用28位?,erlang,integer,Erlang,Integer,今天我读了Erlang文档中关于效率指南的高级章节 小整数: 1个单词 在32位体系结构上:-134217729

今天我读了Erlang文档中关于效率指南的高级章节

小整数:
1个单词
在32位体系结构上:-134217729 在64位体系结构上:-576460752303423489 大整数:
3..N个单词

(对不起,我试图在降价中使用表格,但无效,请原谅,这是我的第一个问题)

为什么使用28位或60位?其余4位的功能是什么? 小的还是大的由ErlangVM来判断? 32位体系结构是指32位系统还是cpu? 我的英语很差,我是新来的二郎。
thks.

剩余的四位用于识别除数字以外的类型,如列表、元组、PID等

另一种方法是在每个值前面加上一个字节或单词,以确定它是什么类型。但是,将值与类型说明符打包在一起意味着许多值可以放在一个单词中

VM是32位还是64位取决于编译方式。启动Erlang时,如果它被编译为64位程序,您将在横幅中看到
[64位]

Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
您还可以使用
erlang:system\u info(字号)


在这种情况下,字大小为8字节,即64位。

作为一种动态类型化语言,Erlang使用每个字的四位作为类型标记或“dope字段”,以标识该字引用的数据类型。Erlang实际上有不定精度整数;如果整数在32位字体系结构上大于28位,或在64位体系结构上大于60位,则它将透明地装箱到堆上的较大对象中,表示它所需的字节数。但是,装箱整数执行操作的效率较低,因为它们涉及额外的间接层。这就是《效率指南》将其记录下来的原因。

thks谢谢你的帮助^ ^ ^然而,这一点的含义(对我来说)仍然有点不清楚。假设您有:
encode_zigzag32(I::integer())->(I bsl 31)bxor(I bsr 1)。
它在所有情况下都能工作吗?是否会自动装箱?我不知道。。。
1> erlang:system_info(wordsize).
8