Erts的内部类型

Eterm: A tagged erlang term (possibly 64 bits)                                                                  
BeamInstr: A beam code instruction unit, possibly larger than Eterm, not smaller.                               
UInt:  An unsigned integer exactly as large as an Eterm.                                                        
SInt:  A signed integer exactly as large as an eterm and therefor large                                         
        enough to hold the return value of the signed_val() macro.                                               
UWord: An unsigned integer at least as large as a void * and also as large                                      
          or larger than an Eterm                                                                                
SWord: A signed integer at least as large as a void * and also as large                                         
          or larger than an Eterm                                                                                
Uint32: An unsigned integer of 32 bits exactly                                                                  
Sint32: A signed integer of 32 bits exactly                                                                     
Uint16: An unsigned integer of 16 bits exactly                                                                  

Sint16: A signed integer of 16 bits exactly.

其中Eterm在32位或64位halfword虚拟机上长度是32bits。

如果在64位上定义了halfword,并且int的长度不为4那编译就会报错,在内存是白菜价的今天,halfword也许只有在非常特定的场景上出现(arm,mips之类板子)。

根据描述UWord和SWord一定会等于void*,也就是说这两个东西的长度,一定会等于CPU一次性存取内存的大小(内存对齐或边界对齐)。

BeamInstr的值不管再何种情况下都会被定义位UWord。

还有两个东西Uint64和Sint64,这两个东西什么时候会有,只要发现C编译器可以支持64bit(不一定系统要支持),就会被定义。有一点需要注意,如果是编译过程中发现64位系统却没有定义Uint64和Sint64会报错,这种可能性很小,但是被Erts的开发者考虑进去了。

你可能感兴趣的:(Erts的内部类型)