[李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--链表
来源:互联网 发布:淘宝名可以修改吗 编辑:程序博客网 时间:2024/06/05 03:41
链表
在Zend引擎中Hash Table的使用非常频繁,这得益于他良好的查找性能。
哈希表会预先分配内容以提高性能,而很多时候数据规模不会很大,固然使用哈希表能提高查询性能,但是某些场景下并不会对数据进行随机查找,这时使用哈希表有点浪费了。
zend引擎中的连表是双链表,通过双链表的任意节点都能方便的对链表进行遍历。
链表的实现很简单,通常只需要是三个关键元素:
1 指向上个元素指针
2 指向下个元素的指针
3 数据容器
Zend引擎的实现也很简单,如下两个核心的数据接口,第一个是元素节点,第二个是链表容器。
typedef struct _zend_llist_element{ struct _zend_llist_element *next; struct _zend_llist_element *prev; char data[1];// Needs to always be last in the struct}zend_llist_element;typedef struct _zend_llist{ zend_llist_element *head; zend_llist_element *tail; size_t count; size_t size; llist_dtor_func_t dtor; unsigned char persistent; zend_llist_element *traverse_ptr;}zend_llist;
对应关系如下图:
上面的data字段的空间并不是只有一个字节,我们来看一下插入的实现:
ZEND_API void zend_llist_add_element(zend_llist *l,void *element){ zend_llist_element *tmp = pemalloc(sizeof(zend_llist_element)+l->size -1 ,l->persistent); tmp->prev = l->tail; tmp->next = NULL; if(l->tail){ l->tail->next = tmp; }else{ l->head = tmp; } l->tail = tmp; memcpy(tmp->data,element,l->size); ++l->count;}
操作接口
定义一系列函数而已
0 0
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--链表
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--预定义变量
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--静态变量
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--HashTable-1
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--HashTable
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--常量
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--PHP的哈希实现
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--类型提示的实现
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的生命周期
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的作用域
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的赋值和销毁
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--数据类型转换
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--简略
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--global语句
- [李景山php] 深入理解PHP内核[读书笔记]--第五章:类和面向对象 --类的结构和实现
- 静态变量 深入理解php内核
- 深入理解PHP原理之变量结构
- android sqlite数据库详解例子
- leetcode7/reverse integer
- webbrowser、requests、Beautiful Soup学习
- Eclipse 保存代码时自动格式化
- 安卓socket通信连接创建演示(socket通信第一弹)
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--链表
- redis 集群中主节点被系统杀掉问题
- HTML5拖拽本地文件
- 各浏览器下placeholder的设置方法
- PE文件结构详解(三)PE导出表
- MaxCompute基础与MaxCompute_SQL优化
- 智能指针之unique_ptr
- Cobbler全自动批量安装部署Linux系统
- 利用selenium模块控制浏览器