摘要:
rehash是根据当前表格中的数据重新计算一个比较函数的:数组大小和hash表大小,重新申请空间,并重新插入原有数据: 1 static void rehash (lua_State *L, Table *t, const TValue *ek) { 2 int nasize, na; 3 ... 阅读全文
摘要:
通过luaH_new创建的Table开始实际上是一张空表,只是包含了Table本身的数据 结构。创建完以后需要添加元素,添加到函数为:luaH_set,该函数在设置前会根据key的值去获取对应的Value,如果能找到,则直接设置,如果找不到,则需要申请一个位置来存放(Key,Value)。1 TVa... 阅读全文
摘要:
table(lobject.h)的结构定义: 1 // TKey结构是一个链表结构,用来存储hash相同 2 // 的所有key,value对结构。 3 typedef union TKey { 4 struct { 5 TValuefields; // key值 6 ... 阅读全文
摘要:
lua的堆栈中存放的是通用变量,通用变量实际上就是一个union内存块,根据不同的类型,采用不同的组织方式,看一下通用类型的相关定义,截取了lobject.h相关代码,从代码上看,不太清楚numfield为什么会有两个相关定义。堆栈中可以根据情况分为一下几种类型:1、双精度浮点数:double d_... 阅读全文
摘要:
lua中的字符串是对象,主要分析一下对象的结构和申请的方式。TString是一个union,为了进行字节对齐,中间插入了L_Umaxalign,按照union的定义union的大小,必须是单个结构大小的整数倍,按照目前的定义,应该是double大小的整数倍。 1 /* type to ensure ... 阅读全文
摘要:
Lua在载入lua文件的时候,读取过程中通过cache的方式,默认cache为512字节:1、cache中包含数据时,直接将cache中数据返回;2、cache中不包含数据的时候,每次读取512个字节,进行cache; 1 typedef struct LoadF { 2 int n; /* ... 阅读全文
摘要:
最近碰到一些文件操作接口方面的工作,实际上Windows提供了多种接口:1、Shell脚本系列,SHFileOperation,通过设置不同的参数实现不同的效果,支持:move、copy、delete、rename四种操作。2、c-runtime library中包含的文件和文件夹操作接口:_mkdir、_rmdir、_cddir、remove、rename、fopen、fread、fwrite、fseek、fclose等。3、Wn32的File Management Functions文件操作接口:CreateFile、CreateDirectory、DeleteFile、CopyFile、 阅读全文