当前位置: 首页 > news >正文

手机网站建设市场塘沽网站开发

手机网站建设市场,塘沽网站开发,网络推广途径,阿里云企业建站教程目录 lua底层原理浅析 table底层原理浅析 Lua表的C语言定义 原理和实现 userdata lua和C#的交互机制#xff08;更新中#xff09; 基本介绍 Lua 与 C/C 的数据交互 Lua 调用 C/C 函数 C/C 调用 Lua 函数 基元类型传递 对象类型传递 Lua 调用 C# 总结 网上有很… 目录 lua底层原理浅析 table底层原理浅析 Lua表的C语言定义 原理和实现 userdata lua和C#的交互机制更新中 基本介绍 Lua 与 C/C 的数据交互 Lua 调用 C/C 函数 C/C 调用 Lua 函数 基元类型传递 对象类型传递 Lua 调用 C# 总结 网上有很多文章写和C#的交互原理但大多比较复杂截止到目前为止笔者也只是了解了其中的一部分目前还在边学边做笔记的阶段所以说是浅析后续会做更深入的研究。 lua底层原理浅析 Lua的底层实现是基于C语言这使得它非常轻量级且高效同时具有很好的跨平台特性。 虚拟机VM Lua使用基于寄存器的虚拟机来执行编译后的字节码。这与基于堆栈的虚拟机相比可以减少指令数量和执行时间。Lua的字节码是平台无关的这意味着在一台机器上编译的Lua代码可以在任何其他平台上运行只要那里有Lua虚拟机。 解释器和编译器 Lua源代码首先被一个解释器读取解释器是用C语言编写的。源代码被解析成抽象语法树AST然后转换成中间表示最终编译为字节码。 内存管理 Lua使用自动垃圾回收机制来管理内存。它主要使用标记-清扫mark-and-sweep算法来回收不再使用的内存。 垃圾回收部分具体可以看我的另外一篇文章 Lua的垃圾回收机制详解-CSDN博客 table底层原理浅析 Lua的表table是其最强大的特性之一它们是动态的关联数组可以用作普通数组、字典、对象等。在C语言中Lua的表是通过一种复杂的数据结构实现的这种结构使得表既能高效地存储和访问序列元素也能高效地处理散列键值对。 Lua表的C语言定义 在Lua的C源码中表是通过struct定义的主要是Table结构。这个结构包括指向数组部分和散列部分的指针以及这些部分的大小等信息。核心结构大致如下简化版本用于说明 typedef struct lua_Table {CommonHeader;lu_byte flags; /* 一些标志位 */lu_byte lsizenode; /* 散列表部分的大小 */unsigned int sizearray; /* 数组部分的大小 */TValue *array; /* 数组部分的指针 */Node *node; /* 散列表部分的指针 */Node *lastfree; /* 散列表的一个自由位置 */struct Table *metatable; /* 元表 */GCObject *gclist; } Table;原理和实现 Lua表的实现基于以下原理 双重结构 Lua表由两部分组成一个数组Array部分和一个散列Hash部分。数组部分用于存储以数字为键的元素而散列部分用于存储其他类型的键值对。 动态调整 当你向表中添加或移除元素时Lua会动态调整这两部分的大小和存储方式以保持操作的高效性。例如如果你主要使用数字键Lua会倾向于扩展数组部分而减少散列部分。 散列算法 对于非数字键Lua使用散列算法来快速定位和存储键值对。Lua的散列算法旨在减少冲突并快速处理查找、插入和删除操作。 数组和散列表的动态重分配 Lua会根据表的使用情况动态地重分配内部数组和散列结构以优化内存使用和访问速度。 元表支持 Lua表还可以有一个元表metatable用于定义该表的特殊行为比如操作符重载或自定义访问方式。 userdata 在Lua编程语言中userdata 是一种特殊的数据类型用于表示任何由应用程序或者C语言代码创建的数据对象。userdata 提供了一种将C中的数据和对象暴露给Lua代码的方式同时保持类型安全和内存管理的控制。 userdata 在Lua中主要有两种形式 全用户数据Full userdata 这是一个指向C数据的指针Lua只负责存储和传递这个指针不尝试理解或操作其指向的数据。它是一个黑盒Lua不知道其内部结构只是简单地通过指针来引用它。Lua负责管理这些对象的内存生命周期通常是通过垃圾回收机制。 轻量用户数据Light userdata 这也是一个指针但Lua不管理其指向的内存。轻量用户数据相当于一个裸指针其生命周期由外部代码控制。它适用于表示轻量级的、生命周期由应用程序控制的对象。 userdata 的主要用途包括 将C中的对象传递到Lua代码使得Lua代码可以间接地操作这些对象。在C和Lua之间共享数据尤其是当需要在Lua脚本中操作C语言中创建的复杂数据结构时。实现C和Lua之间的接口调用尤其是在嵌入Lua到C/C应用程序时。 使用 userdata 时通常会配合元表metatable来提供对象的方法和属性这样Lua代码就可以像操作普通的Lua对象那样操作C中的数据。这是实现面向对象编程风格的一种常用手段特别是在Lua绑定到C/C库的上下文中。 lua和C#的交互机制更新中 参考文章 C#与XLua交互原理 - 知乎 (zhihu.com) 基本介绍 Lua 虚拟机Lua 是由 C/C 实现的因此它可以直接与宿主程序如Unity进行通信。C# 与 Lua 交互C# 通过 P/Invoke平台调用方式调用 Lua 虚拟机函数。这意味着 C# 可以通过 C/C 层与 Lua 进行数据交互。xLua 中的 P/InvokexLua 提供的 P/Invoke 调用接口主要在 LuaDLL.cs 文件中。 Lua 与 C/C 的数据交互 虚拟栈Lua 提供了一个虚拟栈用于数据交换。所有类型的数据交换都通过这个栈完成。栈索引Lua 有两种索引方式操作虚拟栈 — 正数索引1表示栈底和反向索引-1表示栈顶。 Lua 调用 C/C 函数 包装函数将C函数包装成可供Lua调用的格式通常是接收一个Lua状态机指针的静态方法。注册函数在Lua环境中注册这些包装好的函数。调用过程Lua调用时通过Lua栈获取参数执行函数然后将结果压栈返回。 C/C 调用 Lua 函数 获取函数使用 lua_getglobal 获取Lua函数并将其压入栈。压栈参数将函数的参数压入栈。执行函数调用 lua_pcall 执行函数。处理结果如果无误从Lua虚拟栈中取出结果。 基元类型传递 直接通过 C API 传递如 lua_pushboolean, lua_pushnumber 等。 对象类型传递 过程C# 对象在Lua中通过表table模拟传递的是索引同时需要将C#类型信息注册到Lua。userdataC# 对象在 Lua 中对应的是一个 userdata用于保持与C#对象的联系。元表为 userdata 设置的元表包含了对象的类型信息如成员方法、属性等。 Lua 调用 C# Lua 通过调用 C# 包装好的静态方法来实现调用这些方法转换Lua的调用为C#函数的调用。使用元表信息来确定要调用的C#方法和属性。函数通过Lua的栈接收参数参数按顺序入栈。 总结 在 Unity 中xLua 框架通过 C API 层实现 C# 和 Lua 的交互。Lua 和 C# 之间的调用主要是通过虚拟栈来传递数据和参数。C# 对象在Lua中通过 userdata 表示而 C# 与 Lua 的函数调用则是通过预先包装好的静态方法来实现。这个过程涉及多个层面的数据转换和类型匹配但最终实现了两种语言间高效的互操作性。
http://www.dnsts.com.cn/news/82721.html

相关文章:

  • 南充房产信息网站优化网站建设
  • 网站 分站深圳app定制开发外包公司
  • 网站推广途径及要点网站更改备案信息吗
  • 网站 跳出率 多少沧州营销软件
  • 网站开发需要配置哪些人员增城新塘网站建设
  • 淘宝网站是谁做的好处网站建设开题报告数据库建立
  • 江门网站建设推广策划设计好的装修公司
  • html网站免费模板胶南网站建设
  • 福建省建设厅网站林瑞良北京网页设计公司
  • wordpress读取父分类列表企业网站改版seo
  • 网站建设维护资质做水果蔬菜生意网站
  • c 网站开发社区网站制作
  • 招远网站建设招聘手机网站作用
  • 2003访问网站提示输入用户名密码wordpress 上传附件按钮美化
  • 西安建网站的公司wordpress 清除cookie
  • 建设银行贷款官方网站电子商务网站特色
  • 网站建设模板个人泰州seo
  • 闵行网站设计有限责任公司成立条件
  • 做网站注意的问题做网站找哪家好要钱吗
  • 家装行业网站建设网站建设网站营销网站托管一体化
  • 深圳傻瓜式网站建设公司好吗中国建设银行青岛分行网站
  • 网站开发环境准备wordpress程序迁移
  • 网站的备案的要多少钱做网站 看什么书
  • 建设网站的价钱郑州做网站的专业公司有哪些
  • 郑州网站制作招聘高校网站建设的优势和不足
  • 西安外贸建站php做的网站怎么调试
  • 电商网站后台建设问题江西省上饶市城乡建设网站
  • 广告模板在哪个网站好中国电影家协会会员
  • 咨询网站公司建设计划书巨鹿网站建设多少钱
  • 国内vps推荐优化课程体系