![](https://img-blog.csdnimg.cn/20201112210132952.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
C/C++
食鱼酱
一只努力向上的程序员
展开
-
erlang数据类型的c源码解析(4)-map
1、前言 本文讲到的map是OTP17版本的map,OTP18进行一次map的优化。 在erl_map.h中有结构体的定义,代码如下: typedef struct map_s { Eterm thing_word; Uint size; Eterm keys; /* tuple */ } map_t; /* map node * * Keys是一个tuple,存储着所有的Key * 紧跟结构体后面的一块连续内存用于存储对应的Val * -----------原创 2020-11-13 11:04:09 · 602 阅读 · 1 评论 -
erlang数据类型的c源码解析(3)-tuple
1、前言 在erlang数据类型的c源码解析(1)-Eterm讲到,当Eterm的低2位为10B时,为Boxed(装箱)类型。tuple是Boxed类型中的一种。 低2位外的位数用来表示一个指向arityval的指针。 arityval的定义如下如下: // 低2位为00B,Header类型 #define ARITYVAL_SUBTAG (0x0 << _TAG_PRIMARY_SIZE) /* TUPLE */ 为arityval是一块连续内存空间,可以当作是C语言的数组,且数组首部元素原创 2020-11-12 20:27:51 · 818 阅读 · 0 评论 -
erlang数据类型的c源码解析(2)-list
1、前言 在erlang数据类型的c源码解析(1)-Eterm讲到,当Eterm的低2位为10B时,就是List类型,剩余的位数表示一个指向列表的指针。 另外就是,先讲结论,有助于理解,Erlang中的List在C的层面上是一个链表。 2、常识的宏定义 CONS:一个链表节点 CAR:一个链表结点的数据部分 CDR:一个链表结点的Next指针 #define CONS(hp, car, cdr) \ (CAR(hp)=(car), CDR(hp)=(cdr), make_list(hp))原创 2020-11-11 09:09:18 · 710 阅读 · 4 评论 -
erlang数据类型的c源码解析(1)-Eterm
1、Eterm是啥? Erlang的数据类型在C语言的层面都可以用Eterm来表示。 原文注释: Eterm: A tagged erlang term (possibly 64 bits) 此外,Eterm在sys.h中定义,可能是uint32,也可能是uint64,代码如下: #if SIZEOF_INT == 4 typedef unsigned int Eterm; ... #endif #if SIZEOF_VOID_P == SIZEOF_LONG typedef unsigned long原创 2020-11-11 09:02:31 · 757 阅读 · 0 评论