LUA TValue

//其形式如下:
typedef struct TValue {Value value_;    //raw valuelu_byte tt_; //raw type tag
} TValue;//其Value为LUA所支持的基本类型的union形式
typedef union Value {struct GCObject *gc;void *p;lua_CFunction f;lua_Integer i;lua_Number n;
} Value;// lu_byte tt_ 即 unsigned char tt_ 为变量类型
因此ttisinteger(o) 等价于 o->tt_ == 3 ? true : false

union结构体中各项的具体意义为:

变量 说明
GCObject gch 用于垃圾回收 主要是为了连接垃圾回收对象的互相引用关系
void *p 为c中传入的指针,由c 分配和释放
lua_CFunction f 表示C导出给lua的函数指针,typedef int (*lua_CFunction) (lua_State *L);
lua_Integer i 表示整数类型,typedef long long lua_Integer;
lua_Number n 表示双精度浮点类型,typedef double lua_Number;

从网络上找到的一个TValue结构图见下:

图示与代码已经有了一些可见变化,可见lua 5.3 版本相较于图示结构已经有了一些修改,比如取消了原本使用int类型存贮bool值的b,将原本存储所有数值类型的double n拆为存储整数的lua_Integer的i和存储双精度浮点数的n
其中GCObject gch的结构,如下:

typedef struct GCObject {struct GCObject *next;unsigned char tt;unsigned char marked;
} GCObject;

next指向下一个链表结构,tt表示类型,marked是垃圾回收的标记,具体LUA 5.3 垃圾回收机制见:LUA 5.3 垃圾回收机制.(重要不紧急)

LUA TValue结构相关推荐

  1. LUA CallInfo结构,StkId结构解析

    StkId结构: typedef union StackValue {TValue val; } StackValue;typedef StackValue *StkId; StkId仅为一个正常的L ...

  2. lua 函数调用1 -- 闭包详解和C调用

    这里, 简单的记录一下lua中闭包的知识和C闭包调用 前提知识: 在lua api小记2中已经分析了lua中值的结构, 是一个 TValue{value, tt}组合, 如果有疑问, 可以去看一下 一 ...

  3. [转载]Lua和C++交互详细总结

    原文请看:Lua和C++交互详细总结 转自:http://cn.cocos2d-x.org/tutorial/show?id=1474 一.Lua堆栈 要理解Lua和C++交互,首先要理解Lua堆栈. ...

  4. Lua和C++交互详细总结

    一.Lua堆栈 要理解Lua和C++交互,首先要理解Lua堆栈. 简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈.栈的特点是先进后出. 在Lua中,Lua堆栈就是一个struct ...

  5. 深入理解 Lua 虚拟机

    作者:nicochen,腾讯 IEG 游戏开发工程师 本文从一个简单示例入手,详细讲解 Lua 字节码文件的存储结构及各字段含义,进而引出 Lua 虚拟机指令集和运行时的核心数据结构 Lua Stat ...

  6. lua检测表中是否有某个值_Lua基础知识总结(入职面试题)

    2019年8月刚入职新公司时,因为之前的项目都没有使用lua的经验,所以jojo老大出了一份题让我想尽办法找出答案,当时对于一个无经验的小菜鸟来说,属实费了不少功夫,如今分享出来,希望能对刚使用lua ...

  7. lua 和 c交互详解(一)

    lua与c之间交互是通过"lua堆栈"通信的.不管是lua调用c还是c调用lua,都是通过操作lua堆栈实现的.顾名思义,lua堆栈也满足后进先出的特点,入栈/出栈都围绕栈顶进行的 ...

  8. LUA源码分析二:了解lua的文件结构和思考方式

    版本整理日期:2011/3/27 对lmathlib.c文件中的函数进行跟调.函数是那个不重要,这里选取math_abs /*lmathlib.c取出一个TValue,转成整型,然后fabs处理.TV ...

  9. 无线专题 openwrt feeds、web框架luci(lua语言)、UCI (统一配置接口)

    1.openwrt feeds UCI (统一配置接口)openwrt官方说明(有中文版本):https://oldwiki.archive.openwrt.org/zh-cn/doc/uci 在Op ...

最新文章

  1. 浅谈《think in java》:一 对象导论总结
  2. 切糕[HNOI2013]
  3. 手挽手带你学React:四档(上)一步一步学会react-redux (自己写个Redux)
  4. 如何编写 Nagios 插件
  5. opencv 通过标定摄像头测量物体大小_视觉激光雷达信息融合与联合标定
  6. boost::multiprecision模块测试 cpp_dec_float_50 是否符合我们的 概念要求
  7. 《IPv6技术精要》一2.4 扩展报头
  8. Java程序员的10个XML面试问答
  9. 从零开始实现数据结构(一) 动态数组
  10. 项目:关于分层,DAO、domain、service、servlet的一些理解
  11. CSS3之图片3D翻转效果(网页效果--每日一更)
  12. Quartz入门指南
  13. [swift] LeetCode 96. Unique Binary Search Trees
  14. mysql处理sql时间格式_mysql 处理日期格式
  15. R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(一,基本原理)
  16. vs2015 hiredis编译使用
  17. 苹果4s怎么越狱_越狱源和插件大全2020.4.4
  18. SecureCRT 完美代替超级终端
  19. C语言杨辉三角前15行,C语言输出杨辉三角前n行(低时间复杂度)
  20. 如何利用炒股中的L2行情数据功能对比,以及用途数据分析。(附代码)

热门文章

  1. Web视频通话时怎么美颜?教你3步轻松实现
  2. EWSTM8系列教程04_菜单概述(一)
  3. 微信小店的钱如何自动提现到个人微信?
  4. Python实现的淘宝直通车数据抓取(1)
  5. airmusic产品分析报告
  6. 初识Matlab2012a的神经网络工具箱(1)
  7. JMeter测试遇到401错误
  8. 重装win10系统之后的硬盘分区(机械和固态一块使用)
  9. Tencent Linux(TencentOS) 十年云原生迭代演进之路
  10. 微信小程序功能被封禁怎么办(附上解决方案)