元表与元方法Lua 中每个值都有一套预定义操作集,表示这个值可以有什么操作,这个操作集就是这个值元表。对一个值进行某种操作,lua 首先会查找它元表看看有没有对应字段,如果找到了字段,则调用该字段值,也就是元方法,它是一个函数。 比如进行 a+b 操作时,先查找 a 或 b 元表中有没有字段 __add,如果有这个字段,调用该字段对应元方法,否则操作不合法。table 和 user
转载 2024-02-25 22:54:43
298阅读
对于lua内存优化我自己一点看法。1.table  hash 部分 key 也是要占用内存 除开字符串 -其他类型做key 消耗其实差不多         其中 booean 应该是最小 ,字符串有些人习惯字符串key写多长,我估计没有注意到        字符串key 就算没有[""] 这种
转载 2024-08-07 09:00:53
58阅读
一、需要注意数据类型1. 表tableLua 实现表算法颇为巧妙。每个表包含两部分:数组(array)部分和哈希(hash)部分,数组部分保存项(entry)以整数为键(key),从 1 到某个特定 n,所有其他项(包括整数键超出范围)则保存在哈希部分。哈希部分使用哈希算法来保存和查找键值。它使用是开放寻址(open address)表,意味着所有的项都直接存在哈希数组里。键值
转载 2024-05-08 21:34:27
67阅读
LuaGC机制LuaGC机制1、Lua垃圾回收采用是什么算法2、Lua垃圾回收算法原理简述3、Lua垃圾回收中三种颜色白色(White):可回收状态。灰色(Gray):中间状态。黑色(Black):不可回收状态。4、Lua垃圾回收详细过程5、基本算法描述 LuaGC机制        几乎所有现代编程语言都有自动化内存
转载 2024-04-24 12:31:31
129阅读
概述本文会介绍lua每一个类型用法,以及其类型在底层实现,并通过测试来验证内存占用大小。对于使用者来说,了解不同类型在底层具体实现,并不是必须,但是一个加分项。了解之后,也更有助于对lua这门语言深入理解。*本文文章采用源码是 lua-5.3.4 版本。Lua 内存管理方式lua为一个动态、对内存进行自动管理语言。lua内存进行管理关键字叫“gc”(garbage coll
转载 2024-04-13 11:44:22
188阅读
这两天剖析了一下socket.lua,整体不是很难,主要是数据缓冲区实现需要好好分析一下。这里读写数据也是用到了缓冲池思想,为了更加直观说明代码,还有方便测试,我去掉lua代码,把核心接口直接用C++实现了一遍:#include <stdio.h> #include <string.h> #include <vector> using std::vecto
转载 2024-02-27 14:59:34
183阅读
关于内存泄露: 客户一台AP server,内存使用量一直很大,swap使用量从三月份开始在慢慢增多。怀疑与内存泄露有关,查找了一些资料,发现对于linux真个系统内存泄露检测工具很少。有如下几个,但是都只针对单个程序。如果测试真个内存情况,特别是历史记录,不知道还有没有好工具。 Valgrind 用C/C++开发其中最令人头疼一个问题就是内存管理,有时候为了查找一个内存泄漏或者一个内
转载 10月前
14阅读
table表是Lua中唯一数据结构,其他语言所提供数据结构如数组arrays、记录records、列表lists、队列queues、集合sets等,在Lua中都是通过table实现。在C或 Passcal中会使用数组arrays列表和lists(record+pointer)来实现大部分数据结构,而在Lua中不仅可以用table完成同样功能,而且table功能更加强大。通过使用tabl
转载 2024-04-30 20:10:25
77阅读
Lua内存是自动收集, 这点跟Java类似, 不被任何对象或全局变量引用数据,将被首先标记为回收,不需要开发者做任何事情.但是,正如Java也会有内存泄露一样, Lua也会有, 只不过,跟C++不同,它是由于代码执行所装载资源,并没有被彻底销毁而导致,其中,最臭名昭著就是不小心把局部变量声明成了全局变量(忘了加local修饰符)。 类似这样造成
转载 2024-03-24 15:11:44
253阅读
ua使用基于被内置在Lua某些算法垃圾收集自动内存管理。可以自动内存管理结果,作为一个开发者:没有必要担心对象分配内存。无需释放他们时,不再需要可将其设置为nil。 Lua使用运行不时收集死对象时,不再从Lua程序中访问垃圾收集器。 所有对象,包括表,用户数据,函数,线程,字符串等受自动内存管理。 Lua使用增量标记和使用两个数字来控制其垃圾回收周期即垃圾收集暂停和垃圾收集器步骤事半功
一、背景:测试发现程序内存占用(qnx中是hogsmemery, linux中是htop中RES)上升到比较高位置之后,就不会再往下有大降低。因此网上查阅资料top中VIRT和RES含义: VIRT: 虚拟内存,它是一个假象内存空间,在程序运行过程中虚拟内存空间中需要被访问部分会被映射到物理内存空间中。虚拟内存空间大只能表示程序运行过程中可访问空间比较大,不代表物
本文讲解了 Lua 中长度运算符(#)一些知识 (注: 以下讨论基于 Lua 5.3.5 版本)基础Lua长度运算符(#)可以用于获取 table "长度",举个简单例子:local t = { 1, 1, 1 } print(#t) -- 3但其实对于 table 而言,长度运算符并不等同于获取 table "长度",更准确一些说法应该是获取 table 序列部分长度,而所谓序
转载 2024-02-24 23:40:46
351阅读
Lua程序设计】TableTableLua语言中最主要和强大数据结构(确实)。可以表示很多数据结构,包括但不限于数组,集合,字典,链表。实现面向对象也是通过使用表(后续再写)。对于Lua语言提供原生函数库其实也是表,表中包含提供给我们使用函数,当进行对应函数调用时其实就是调用对应表中函数。全局变量实际也存储在表( Global)中。 可以将表看做是一个字典,其中key可以为任
转载 2024-02-23 10:48:05
256阅读
在corona sdk里,是用lua去做所有事情。因此,了解lua特性和API非常重要。 什么是Table? 如果你有其他语言开发经验,你应该知道2种数据类型,那就是数组和集合,在lua中,table就是数组和集合混合物(这也是为什么table如此强大原因)。 如果corona sdk是你第一次开始接触编程,你可能认为table就是一个表,或者梳妆台,哈哈。 梳妆台抽屉就类似于“key
转载 2024-03-10 22:43:34
64阅读
Lua向表内新增元素(N)主要走是luaH_newkey函数。其过程大体如下: 根据给定key计算出应该存放位置P如果P处没有元素,直接存放就好如果P处已经有元素,这时存在两种情况: 在P处发生了碰撞,需要在物理上将N存放到下一个空位,并从逻辑上将N连接到P链表中在别处放生碰撞元素(O)被放到P处,需要将O移到下一个空位,将N存放到P处 可以看到,无论何处发生碰撞导致P处被占据,
转载 2024-04-06 10:56:44
155阅读
Lua table(表) tableLua 一种数据结构用来帮助我们创建不同数据类型,如:数组、字典等。 Lua table 使用关联型数组,你可以用任意类型值来作数组索引,但这个值不能是 nil。 Lua table 是不固定大小,你可以根据自己需要进行扩容。 Lua也是通过tab
转载 2020-04-14 15:00:00
1068阅读
2评论
Toad使用 快速入门                              &nbsp
转载 2024-09-05 10:58:20
63阅读
什么是伪共享关于伪共享讲解最清楚是这篇文章《剖析Disruptor:为什么会这么快?(三)伪共享》,我这里就直接摘抄其对伪共享解释: 缓存系统中是以缓存行(cache line)为单位存储。缓存行是2整数幂个连续字节,一般为32-256个字节。最常见缓存行大小是64个字节。当多线程修改互相独立变量时,如 果这些变量共享同一个缓存行,就会无意中影响彼此性能,这就是伪共享。缓存
lua中表实现原理为:按照key数据类型分成数组部分和散列表部分,数组部分用于存储key值在数组大小范围内键值对,其余数组部分不能存储键值对则存储在散列表部分。表数据结构typedef struct Table { CommonHeader; lu_byte flags; /* 第8位为0,则表示alimit为数组实际大小,否则需重新计算 */ lu_byte lsize
转载 2024-03-20 14:32:36
190阅读
tableLua 一种数据结构用来帮助我们创建不同数据类型,如:数组、字典等。Lua table 使用关联型数组,你可以用任意类型值来作数组索引,但这个值不能是 nil。Lua table 是不固定大小,你可以根据自己需要进行扩容。Lua也是通过table来解决模块(module)、包(package)和对象(Object)。 例如string.format表示使用"format
  • 1
  • 2
  • 3
  • 4
  • 5