博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua 1.0 源码分析 -- 2 内存回收
阅读量:5174 次
发布时间:2019-06-13

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

  说这个,先要说下 lua 的环境,正常说创建一个 lua 的虚拟环境,就是创建一组全局变量, lua1.0 里创建的主要是以下几个:

  

extern Symbol *lua_table;          /* 符号数组 */extern Word    lua_ntable;extern char  **lua_constant;    /* 常量数组 */extern Word    lua_nconstant;extern char  **lua_string;        /* 字符数组 */extern Word    lua_nstring;extern Hash  **lua_array;        /* Hash 数组, 这个结构存的东西基本没有不能存的 */extern Word    lua_narray;extern char   *lua_file[];        /* lua 操作的文件描述数组 */extern int     lua_nfile;static Object stack[MAXSTACK] ;    /* 虚拟指令操作的 stack */

 

  内存的回收 lua 的思想比较简单,就是 检查  lua_array, lua_string 中的成员是否在 stack 中, 不在的话就移除。

  具体的实现就是标记 stack , 遍历数组, 因为在入数组的时候,是 strdup,直接 释放就好了,所以效率会很好。 lua_array 的思想一样。

  

/*** Simulate a garbage colection. When string table or array table overflows,** this function check if all allocated strings and arrays are in use. If** there are unused ones, pack (compress) the tables.*/static void lua_pack (void){ lua_markstack (); lua_marktable ();  { /* pack string */  int i, j;  for (i=j=0; i

 

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

你可能感兴趣的文章
BestCoder-Round#33
查看>>
Codeforces Round #527 (Div. 3) D1. Great Vova Wall (Version 1)
查看>>
集合,ArrayList练习
查看>>
宋体汉字字号和点阵大小对应关系
查看>>
动力学公式…
查看>>
[BZOJ1500][NOI2005]维修数列
查看>>
[OJ#15]TR #2 画心
查看>>
吴恩达机器学习笔记 —— 13 支持向量机
查看>>
k-means算法的优缺点以及改进
查看>>
Spring-Boot + MyBatis-Plus 踩坑记录
查看>>
复习--最小生成树&&并查集
查看>>
UML学习笔记<1>
查看>>
天书夜读:WinDbg配置和使用基础
查看>>
middleware
查看>>
c#如何实现自动更新
查看>>
winfrom桌面程序调用python解释器
查看>>
Activity代码结构
查看>>
分页,缓存,序列化,信号
查看>>
python中的变量
查看>>
Linux进程管理命令备忘
查看>>