• 《lua设计与实现》第2章 Lua中的数据类型


    //主要有以下几种数据类型
    //lua.h:72
    #define LUA_TNONE          (-1) //
    
    #define LUA_TNIL              0 //
    #define LUA_TBOOLEAN          1 // 布尔
    #define LUA_TLIGHTUSERDATA    2 // 指针 void* 使用者管理
    #define LUA_TNUMBER           3 // 数字 lua_Number
    #define LUA_TSTRING           4 // 字符串 TString
    #define LUA_TTABLE            5 // 表 Table
    #define LUA_TFUNCTION         6 // 函数 CClosure、LClosure
    #define LUA_TUSERDATA         7 // 指针 void* Lua内部管理
    #define LUA_TTHREAD           8 // Lua虚拟机、协程 lua_state
    
    //lobject.h:189
    //判断是否需要GC(Garbage Collection)操作
    #define iscollectable(o)     (ttype(o) >= LUA_TSTRING)
    
    //lobject.h:43
    #define CommonHeader    GCObject *next; lu_byte tt; lu_byte marked
    
    //lobject.h:338
    //任何需要GC操作的数据类型都有 CommonHeader 这个部分,例如Table的定义
    typedef struct Table {
      CommonHeader;
      lu_byte flags;         /* 1<<p means tagmethod(p) is not present */ 
      lu_byte lsizenode;     /* log2 of size of `node' array */
      struct Table *metatable;
      TValue *array;         /* array part */
      Node *node;
      Node *lastfree;        /* any free position is before this position */
      GCObject *gclist;
      int sizearray;         /* size of `array' array */
    } Table;
    
    //lobject.h:49
    typedef struct GCheader {
      CommonHeader;
    } GCheader;
    
    //lstate.h:136
    //GCObject 将所有需要进行垃圾回收的数据类型全部囊括其中
    union GCObject {
      GCheader gch;
      union TString ts;
      union Udata u;
      union Closure cl;
      struct Table h;
      struct Proto p;
      struct UpVal uv;
      struct lua_State th;  /* thread */
    };
    
    //lobject.h:59
    //此外,还有几种数据类型是不需要进行垃圾回收的, 
    //Lua 中将GCObject 和它们一起放在了联合体Value 中:
    typedef union {
      GCObject *gc;
      void *p;
      lua_Number n;
      int b;
    } Value;
    
    //至此,还还欠缺一点东西, 那就是数据的类型(int tt):
    //lobject.h:71
    #define TValuefields    Value value; int tt
    
    typedef struct lua_TValue {
      TValuefields;
    } TValue;

     

  • 相关阅读:
    Java多线程知识-Callable和Future
    C#程序集Assembly学习随笔(增补版,附图)_AX
    C#程序集Assembly学习随笔(第一版)_AX
    【.Net】 C#访问修饰符
    访问修饰符(C# 编程指南)
    Restful API 架构与设计参考原则
    RESTful API 设计指南
    WebService的两种方式SOAP和REST比较
    公众号
    es6(const、let)
  • 原文地址:https://www.cnblogs.com/yyqng/p/14289412.html
Copyright © 2020-2023  润新知