亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

實現Lua中數據類型的源碼分享

2024-07-21 23:04:27
字體:
來源:轉載
供稿:網友

概述

    在Lua中有8種基礎類型:nil、boolean、number、string、userdata、function、thread和table。可以使用函數type查看某個變量或值的類型,返回相應的類型名稱。像其他動態語言一樣,在語言中沒有類型定義的語法,每個值都攜帶了它自身的類型信息。下面將通過Lua 5.2.1的源碼來看類型的實現。

   源碼實現

     Lua將值表示成帶標志的聯合結構,代碼如下(lobject.h):

 90 /*  91 ** Union of all Lua values  92 */  93 typedef union Value Value; 100 /* 101 ** Tagged Values. This is the basic representation of values in Lua, 102 ** an actual value plus a tag with its type. 103 */ 104  105 #define TValuefields  Value value_; int tt_ 400 struct lua_TValue { 401  TValuefields; 402 }; 

可以看出結構體有兩個成員:

    一個是整型的tt_用來表示數據類型,Lua中所有的數據類型定義如下(lua.h):

78 #define LUA_TNIL    0 79 #define LUA_TBOOLEAN    1 80 #define LUA_TLIGHTUSERDATA 2 81 #define LUA_TNUMBER   3 82 #define LUA_TSTRING   4 83 #define LUA_TTABLE   5 84 #define LUA_TFUNCTION    6 85 #define LUA_TUSERDATA    7 86 #define LUA_TTHREAD   8 

可以看到實現了9種數據類型,其中把語法中userdata分為LUA_TLIGHTUSERDATA和LUA_TUSERDATA,其中前一種類型即為輕量級userdata(light userdata),輕量級userdata是一種表示C指針的值,對Lua虛擬機來說,這種數據類型不需要GC(垃圾回收),其指向的內存由用戶分配和釋放;后一種userdata類型完全userdata(full userdata),內存是由Lua虛擬機分配,并有GC機制負責處理。

 結構體lua_TValue另一個數據成員是value_,它是一個聯合體,代碼如下(lobject.h):

 96 #define numfield  lua_Number n;  /* numbers */ 103 typedef LUA_NUMBER lua_Number;(lua.h) 392 #define LUA_NUMBER   double(luaconf.h) 391 union Value {  392  GCObject *gc;  /* collectable objects */ 393  void *p;     /* light userdata */ 394  int b;      /* booleans */ 395  lua_CFunction f; /* light C functions */ 396  numfield     /* numbers */ 397 }; 

通過注釋,可以很容易理解每個成員的含義,但有必要對以下幾個成員說明:

    numfield:用來表示所有數值,其實質對應的是double類型。包括整型也是用這個來表示。另外在Lua 5.3實現,分開了整型和浮點數的表示。

    GCObject *gc:用來指向那些需要垃圾回收的對象,包括string、table、function、完全userdata和thread類型。GCObject用來表示可以垃圾回收的對象,它也是一個聯合體,其代碼如下(lstate.h)

185 union GCObject { 186  GCheader gch; /* common header */ 187  union TString ts; 188  union Udata u; 189  union Closure cl; 190  struct Table h; 191  struct Proto p; 192  struct UpVal uv; 193  struct lua_State th; /* thread */ 194 }; 

其中成員GCheader gch主要用于GC回收機制使用。其他成員比如TString ts才是真正存儲值的結構,而這些數據結構也會有GCheader,用于GC管理。

    總的來說,Lua中各種數值類型結構如下:

lua數據類型,lua類型轉換,lua數據類型實現

    最后,關于Lua的數據類型實現,值得指出使用帶標志的結構體來表示Lua的數值類型,使得Lua中任何一種數據類型至少占用的空間是個16字節(結構體還需要對其),就算nil類型,也會占用8個字節的空間,因此拷貝Lua值是比較耗時的。下一篇文章將討論Lua字符串的實現。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色婷婷av一区二区三区在线观看| 亚洲自拍av在线| 欧美性在线观看| 人体精品一二三区| 国产精品女人久久久久久| 国产精品88a∨| 欧美一级免费看| 亚洲精品天天看| 性欧美视频videos6一9| 欧美日韩国产成人| 国产精品中文久久久久久久| 亚洲欧洲黄色网| 欧美性开放视频| 国内精品视频一区| 97激碰免费视频| 国产欧美日韩精品专区| 亚洲国产成人精品久久| 日韩成人激情在线| 久久九九精品99国产精品| 在线成人免费网站| 亚洲人成电影在线观看天堂色| 国产精品老牛影院在线观看| 狠狠躁夜夜躁久久躁别揉| 亚洲欧美在线免费观看| 精品女厕一区二区三区| 午夜精品福利视频| 亚洲欧美中文日韩v在线观看| 亚洲精品一区中文| 成人精品久久一区二区三区| 青青精品视频播放| 成人精品aaaa网站| 国产区精品视频| 91麻豆国产精品| 欧美视频在线免费| 亚洲第一二三四五区| 91国内产香蕉| 高清日韩电视剧大全免费播放在线观看| 亚洲美女中文字幕| 亚洲视频999| 亚洲日本欧美中文幕| 亚洲男女性事视频| 中文字幕日韩欧美在线| 精品久久久久久国产| 久久久久久这里只有精品| 国产成人精品一区| 中文字幕精品一区久久久久| 欧洲永久精品大片ww免费漫画| 亚洲午夜色婷婷在线| 97久久超碰福利国产精品…| 亚洲成人精品在线| 日韩亚洲成人av在线| 国语自产偷拍精品视频偷| 亚洲国产99精品国自产| 国产精品久久久久免费a∨大胸| 日韩av免费看网站| 国产精品日韩在线观看| 久久韩剧网电视剧| 欧洲美女免费图片一区| 欧美专区第一页| 九九九热精品免费视频观看网站| 亚洲第一在线视频| 成人信息集中地欧美| 欧美伦理91i| 国产成人亚洲综合91精品| 在线视频欧美性高潮| 欧美在线视频免费播放| 欧美限制级电影在线观看| 欧美性xxxx在线播放| 精品国产乱码久久久久酒店| 韩国福利视频一区| 欧美亚洲国产日本| 国产日本欧美一区| 欧美国产日韩一区二区| 欧美精品少妇videofree| 操日韩av在线电影| 91国自产精品中文字幕亚洲| 日韩小视频在线观看| 成人精品一区二区三区| 亚洲国产精品字幕| 亚洲第一网中文字幕| 久久精品成人欧美大片古装| 久久精品99久久香蕉国产色戒| 黄色一区二区三区| 最近2019年中文视频免费在线观看| 日韩av在线导航| 久久久久久美女| 久久青草福利网站| 69久久夜色精品国产7777| 国产精品自拍偷拍视频| 日本午夜精品理论片a级appf发布| 欧美福利视频在线观看| 久久精品国产亚洲| 色综久久综合桃花网| 一级做a爰片久久毛片美女图片| 91黑丝高跟在线| 亚洲人成电影网站色xx| 日韩精品极品毛片系列视频| 久久久久久有精品国产| 亚洲成人精品av| 亚洲精品久久久久久久久久久久久| 中文字幕免费精品一区| 亚洲**2019国产| 欧美影院在线播放| 久久久精品一区二区三区| 亚洲一区中文字幕在线观看| 亚洲人成电影网站色www| 性金发美女69hd大尺寸| 久久香蕉频线观| 国产日韩欧美黄色| 日韩亚洲欧美成人| 成人在线国产精品| 欧美性猛交xxxx富婆弯腰| 69国产精品成人在线播放| 69**夜色精品国产69乱| 亚洲色图第一页| 岛国av一区二区三区| 亚洲国产成人精品一区二区| 欧美激情18p| 欧美第一黄网免费网站| 亚洲影院在线看| 中文字幕精品网| 欧美成人精品一区二区| 日韩在线观看网址| 亚洲视频在线视频| 亚洲免费成人av电影| 日本一区二区三区在线播放| 欧美午夜www高清视频| 欧美性少妇18aaaa视频| 国产一区欧美二区三区| 日韩亚洲欧美成人| 亚洲精品影视在线观看| 国产精品一区av| 国产精品久久久久久久久久三级| 亚洲成人av中文字幕| 日韩a**中文字幕| 精品国产精品三级精品av网址| 国产精品精品久久久| 国产精品爱久久久久久久| 日本在线观看天堂男亚洲| 亚洲美女激情视频| 亚洲在线观看视频网站| 国产精品久久久久久久久久尿| 91美女片黄在线观看游戏| 国产日韩中文在线| 国产伦精品一区二区三区精品视频| 综合av色偷偷网| 性欧美激情精品| 亚洲精品福利在线| 亚洲欧美日韩国产中文专区| 4438全国成人免费| 亚洲精品在线91| 琪琪第一精品导航| 亚洲欧美日韩一区在线| 亚洲欧美日韩中文视频| 全亚洲最色的网站在线观看| 亚洲二区在线播放视频| 日韩网站免费观看高清| 91香蕉嫩草影院入口| 欧美成人免费一级人片100| www.日韩.com| 精品久久久久久亚洲精品| 久久久中文字幕| 欧美成人精品三级在线观看| 成人精品久久av网站|