今天我读了关于效率指南高级章节的Erlang文件
小整数:
1个字
在32位体系结构上:-134217729<我< 134217728(28位)
在64位体系结构上:-576460752303423489<我< 576460752303423488(60位)大整数:
3..N字
(抱歉,我尝试在降价时使用表格,但它没有用,请原谅我,这是我的第一个问题)
为什么要使用28位或60位?其余4位的功能是什么? erlang VM判断小或大? 32位架构是指32位系统还是CPU? 我的英语很差,我是Erlang的新手。 哎呀。
答案 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位,那么它将被透明地装入堆中的更大对象,代表它所需的字节数。然而,盒装整数执行操作的效率较低,因为它们涉及额外的间接层。这就是效率指南记录它的原因。