lua_State數據結構


lua_State

線程相關腳本上下文
主要包括當前腳本環境的運行狀態信息,還會有gc相關的信息。

global_State 全局信息

// global_State 的主要字段
typedef struct global_State {
    stringtable strt; // hash table for strings 全局字符串的哈希表
    TValue l_registry;  // 對應LUA_REGISTRYINDEX的全局table
    Tstring *tmname[TM_N]; // 元方法的名稱字符串
    Table *mt[NUM_TAGS];  // 基本類型的元表
} global_State;

lua_State

#typedef TValue *StkId;

struct lua_State {
    CommonHeader;
    lu_byte status;              // 線程腳本的狀態
    StkId top;                   // 指向當前線程棧的棧頂指針
    StkId base;                  // 指向當前函數運行的相對基位置
    global_State *l_G;           // 指向global_State
    CallInfo *ci;                // 當前線程運行的函數調用信息
    const Instruction * savedpc; // 函數調用前,記錄上一個函數的pc位置
    StkId stack_last;            // 棧的實際最后一個位置
    StkId stack;                 // 棧底
    CallInfo *end_ci;            // 指向函數調用棧的棧頂
    CallInfo *base_ci;           // 指向函數調用棧的棧底
    int stacksize;               // 棧的大小
    int size_ci;                 // 函數調用棧的大小
    unsigned short nCcalls;      // 當前C函數的調用的深度
    unsigned short baseCcalls;   // 用於記錄每個線程狀態的C函數調用深度的輔助成員
    lu_byte hookmask;            // 支持那些hook能力
    lu_byte allowhook;           // 是否運行hook
    int basehookcount;           // 用戶設置的執行指令數(在hookmask=LUA_MASK_COUNT生效)
    int hookcount;               // 運行時,跑了多少條指令
    lua_Hook hook;               // 用戶注冊的hook回調函數
    TValue l_gt;                 // 當前線程的全局環境表
    TValue env;                  // 當前運行的環境表
    GCObject *openupval;         // 用於gc
    GCObject *gclist;            // 用於gc
    struct lua_longjmp *errorJmp; // 發生錯誤的長跳轉位置
    ptrdiff_t errfunc;            // 發生錯誤的回調函數
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM