摘要:
从C#List的源码看,Remove()方法会触发数组的位移,如果在循环中调用会十分费: for(int i=0;i<arr.Count;i++) { if(arr[i].IsNull()) { arr.Remove(arr[i]); } } 这个时候可以使用RemoveAll(),性能好很多。原理 阅读全文
摘要:
Lua栈是宿主语言(对于官方Lua来说是C语言,对于本书来说是Go语言)和Lua语言进行沟通的桥梁。 Lua的数据类型和值 在lua代码里,变量是不携带类型信息的,变量的值才携带类型信息。换句话说,任何一个lua变量都可以被赋予任意类型的值。 在语言层面,Lua一共支持8种数据类型,分别是nil、布 阅读全文
摘要:
主要是为了保证负数和正数的二进制数据一致 当byte要转化为int的时候,高的24位必然会补1,这样,其二进制补码其实已经不一致了,&0xff可以将高的24位置为0,低8位保持原样。这样做的目的就是为了保证二进制数据的一致性。 阅读全文
摘要:
高级编程语言虚拟机是对真实计算机的模拟和抽象。按照实现方式,虚拟机大致可以分为两类:基于栈(Stack Based)和基于寄存器(Register Based)。 Lua虚拟机则是基于寄存器的虚拟机(实际上Lua在5.0版之前使用的也是基于栈的虚拟机,不过从5.0版开始改成了基于寄存器的虚拟机)。 阅读全文
摘要:
C#-关于GetHashCode的使用准则(转载+翻译)。 - 知乎 (zhihu.com) 作用:优化查找是否相等的操作,将object通过hashcode(可自定义计算的整数)分成不同的容器存储,这样查找的时候只需要找到对应的容器遍历而不是遍历整个容器。 hashcode相等的object不一定 阅读全文
摘要:
二进制chunk:一段可以被lua解释器执行的代码就叫做chunk(写的代码)。 预编译:为了获得更高的执行效率(更快的加载速度),Lua并不是直接解释执行chunk,而是先由编译器编译成内部结构(其中包含字节码等信息),然后再由虚拟机执行字节码。这种内部结构在Lua里就叫作预编译(Precompi 阅读全文
摘要:
原文:Unity中xLua与toLua对Vector3的优化 - 简书 (jianshu.com) 对C#纯值类型(包括struct,但struct只能包含值类型,或者C#的枚举)加上这个标签,会使得该类型在lua和c#间传递不产生GC,该类型的数组也不会产生GC。 原理:优化了值类型传递过程中的拆 阅读全文
摘要:
转载自:深入理解xLua基于IL代码注入的热更新原理 - iwiniwin - 博客园 (cnblogs.com) 例子: 第一步:GenerateCode:为打了Hotfix标签的方法生成对应的匹配函数 [Hotfix] public class TestXLua { public int Add 阅读全文
摘要:
--父类 local Person = { name = "XX" , age = 0 , PrintName = function(self) print("PersonName : "..self.name) end , new = function(self,name,age) obj = { 阅读全文
摘要:
xlua的wrap文件:Xlua 生成wrap文件 - 柯腾_wjf - 博客园 (cnblogs.com) 脑图:xlua - 百度脑图 (baidu.com) 相关扩展:XLua标签(转) - mc宇少 - 博客园 (cnblogs.com) 参考资料: 干货:xlua 是怎么和C#通信的?(二 阅读全文