lua 源码阅读 1.1 -> 2.1
lua 1.1 阅读
1. hash.c 中
a) 对建立的 Hash *array 用 listhead 链式结构来管理,新增lua_hashcollector,用来做 Hash 的回收处理。
ps: 1.0 用的是个 512 的数组,用一个少一个
b) Hash *lua_createarray (int nhash) 中新增阀值,用来控制何时进行内存回收
4.3 lua 2.1 阅读
1. static TreeNode *tree_next (TreeNode *node, char *str) 的代码的简单化
2. 常量数组还是常量数组,但是结构变了
3. 符号数组演化成了还是一个普通数组,这块很有意思,构造是去常量树中确认符号名,原来的 name 字段不用了。
luaI_findsymbol 中做了很多事, node 如果是新的,就加入数组中,之后和正常情况一样返数组下标, 这块用数组和常量树来构造符号表。
lua_constcreate(name) : constant_root 树中遍历,如果没,就加进去,之后返回节点
luaI_findsymbol(TreeNode* t) : 常量树中的节点,如果是新的节点,就要在符号表中加入一条记录,节点记录符号表中的index,这样查找时检索的是常量树
4. stringbuffer 由数组变成链式结构, 这个主要在 lua 要存一个 string 的时候要调用, 比如 contact, lua_tostring, lua_pushstring。
5. Hash 表链不再使用,1.1 也只是保留
v1.1
extern Hash **lua_array;
extern Word lua_narray;
6. lock 是一个数组标识,lua 的源码都是动态扩
7. hash 也做了变迁,由数组变成 list
| 1.1 | 2.1 |
|
typedef struct node
{
Object ref;
Object val;
struct node *next;
} Node;
typedef struct Hash
{
char mark;
unsigned int nhash;
Node **list;
} Hash;
|
typedef struct node
{
Object ref;
Object val;
} Node;
typedef struct Hash
{
struct Hash *next;
char mark;
Word nhash; /* node 的指向的个数,这个申请时是个柔性的,根据一个数组 */
Word nuse;
Node *node;
} Hash;
|
8. lua 的异常处理
设置了一点回归点,异常就跳过去
jup_buf *errorJmp;
setjmp + longjmp 来实现
9. 关于 lockArray
目前应该是没完全看明白,代码中就是把一个对象压入栈和 lockArray 中(对象的 tag 不能为 LUA_T_NIL), 而 lua_unlock 就是把 lockArray[index].tag 置 为 LUA_T_NIL
v2.1 的代码调动只是在回调中把 old_pow 作为 lockArray 的索引来传递
10. 官方 readme 变更说明
* Changes since version 1.1 (current version is 2.1)
+ object-oriented support;
+ fallbacks;
+ simplified syntax for tables;
+ many internal improvements.
ps: 因为面向对象编程自己一直没怎么写过,只有一点概念,封装,继承,多态。
封装比较好理解,就是把成员和一些方法整合到一个内存块中
继承:: objA : objB, A 中有个base 指针指向B
多态: 不同的对象有唯一的标识,当访问某个方法时,会找到对象真实的方法,结构可以用 hash 来存储
2.1 的代码没看到有对 对象相关的操作
lua 源码阅读 1.1 -> 2.1的更多相关文章
- lua 源码阅读 5.3.5 笔记
记录下吧,断断续续读了几周,收益还是很多的. 推荐阅读顺序: 1) 基础数据类型 lstring.c ltable.c lobject.c lfunc.c lstate.c 2) 标准库(这个相对简 ...
- lua 源码阅读顺序
https://www.reddit.com/comments/63hth/ask_reddit_which_oss_codebases_out_there_are_so/c02pxbp Online ...
- cpython和lua源码阅读
cpython代码很多,不太容易看出来. lua代码真的短小精悍,不得不佩服.
- skynet源码阅读<1>--lua与c的基本交互
阅读skynet的lua-c交互部分代码时,可以看到如下处理: struct skynet_context * context = lua_touserdata(L, lua_upvalueindex ...
- Redis源码阅读(一)事件机制
Redis源码阅读(一)事件机制 Redis作为一款NoSQL非关系内存数据库,具有很高的读写性能,且原生支持的数据类型丰富,被广泛的作为缓存.分布式数据库.消息队列等应用.此外Redis还有许多高可 ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
- 【原】FMDB源码阅读(一)
[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...
- 【原】AFNetworking源码阅读(六)
[原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...
随机推荐
- 循序渐进VUE+Element 前端应用开发(20)--- 使用组件封装简化界面代码
VUE+Element 前端应用,比较不错的一点就是界面组件化,我们可以根据重用的指导方针,把界面内容拆分为各个不同的组合,每一个模块可以是一个组件,也可以是多个组件的综合体,而且这一个过程非常方便. ...
- burpsuite抓包乱码问题
网上百度说只需要Change Font选择中文字体即可,但是我这边试过还是乱码,按照网上一篇博客说抓包中按钮展示乱码的问题,在下面Character Sets选择Use a specific char ...
- Python中的相对路径的表示方法
2020/6/3 举例: 现在 6-2.py 想使用 /data/lastfm-2k/user_artists.dat 因为 6-2.py 和 data 是同一级目录,所以正确的写法应该是:
- 原来写插件还可以选MEF
MEF是微软提供的一个轻量级的ICO容器,可以轻易的解除程序集的依赖关系,最近想写个类似插件试的软件所以搜索了一下,终于淘到宝了. 下面我们看看MEF是如何解耦的 新建一个控制台项目两个类库 Ites ...
- sql.表值类型
表值类型是在sql server 2008中新加入的功能,我个人觉得确实很有用,之前从没用过,自从来到现在的公司后学到很多东西,所以和大家分享一下. ------建表值类型语法------------ ...
- 如何成为一位优秀的ScrumMaster
嗨,大家好,我是叶子 背景介绍 目标:为了能更好的适应快速变化的需求和不确定的未来. 部门包含岗位:部门负责人.项目经理.产品经理.开发团队(开发人员.测试人员) 那么这种情况下,我们想转型Scrum ...
- 常用的CSS命名规范大总结
转载: http://www.php.cn/toutiao-417563.html 文本命名规范 index.css: 一般用于首页建立样式 head.css: 头部样式,当多个页面头部设计风格相同时 ...
- 熬夜23天吃透,九大核心专题,成功收割了阿里、百度、美团3家offer
前言 今年受疫情影响非常大,春招和金三银四都要比往年来得更迟一些.春招结束之后,我特意把自己的面试经历顺了顺,总结出了不少的经验.对了,这次一共收割了3个大厂offer,分别是蚂蚁金服.美团和网易,特 ...
- 对比ERP解读企业资产管理EAM在电力行业应用
对比ERP解读企业资产管理EAM在电力行业应用 .关于EAMEAM (Enterprise Asset Management)企业资产管理,是面向固定资产占企业资产主要部分的资产密集型(Capital ...
- java的注解学习
转载自https://www.cnblogs.com/xdp-gacl/p/3622275.html 孤傲苍狼 只为成功找方法,不为失败找借口! Java基础加强总结(一)——注解(Annotatio ...