博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua 源码阅读 1.1 -> 2.1
阅读量:5174 次
发布时间:2019-06-13

本文共 1780 字,大约阅读时间需要 5 分钟。

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 的代码没看到有对 对象相关的操作

 

转载于:https://www.cnblogs.com/ashen/p/11589086.html

你可能感兴趣的文章
python集成安装环境——Anaconda 3.5的安装
查看>>
斐波那契数列
查看>>
function(){} 与(function(){})()的区别
查看>>
作用域
查看>>
yii2高级模板安装
查看>>
ROS学习笔记(六)——创建、编译包
查看>>
SVN服务器搭建(一)
查看>>
js 控制台输出
查看>>
图像处理基础知识
查看>>
串行写队列的MYSQL大文本参数
查看>>
云平台服务运行情况检测脚本V0.1
查看>>
Elasticsearch: 权威指南---基础入门
查看>>
python selenium chrome有界面与无界面模式
查看>>
【Unity游戏开发】Android6.0以上的动态权限申请问题
查看>>
1040 有几个PAT(25 分)
查看>>
1033 旧键盘打字(20 分)
查看>>
Beta总结
查看>>
Spring.NET学习笔记
查看>>
python基础小练习
查看>>
Spring杂记BeanFactory之getBean方法
查看>>