为什么erlang整数使用28位?

时间:2014-08-05 09:57:51

标签: erlang integer

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

  

小整数:
  1个字
  在32位体系结构上:-134217729<我< 134217728(28位)
  在64位体系结构上:-576460752303423489<我< 576460752303423488(60位)

     

大整数:
  3..N字

(抱歉,我尝试在降价时使用表格,但它没有用,请原谅我,这是我的第一个问题)

为什么要使用28位或60位?其余4位的功能是什么? erlang VM判断小或大? 32位架构是指32位系统还是CPU? 我的英语很差,我是Erlang的新手。 哎呀。

2 个答案:

答案 0 :(得分:8)

其余四位用于识别数字以外的类型,例如列表,元组,pid等。

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

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

Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

您还可以查看erlang:system_info(wordsize)

1> erlang:system_info(wordsize).
8

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

答案 1 :(得分:1)

作为一种动态类型语言,Erlang使用每个单词的四个位作为类型标记或" dope-field"以识别该词引用的数据类型。 Erlang实际上有不确定的精度整数;如果整数在32位字体系结构上大于28位或在64位体系结构上大于60位,那么它将被透明地装入堆中的更大对象,代表它所需的字节数。然而,盒装整数执行操作的效率较低,因为它们涉及额外的间接层。这就是效率指南记录它的原因。