主頁(yè) > 知識(shí)庫(kù) > 實(shí)現(xiàn)Lua中數(shù)據(jù)類(lèi)型的源碼分享

實(shí)現(xiàn)Lua中數(shù)據(jù)類(lèi)型的源碼分享

熱門(mén)標(biāo)簽:冀州市地圖標(biāo)注 武漢外呼防封系統(tǒng)多少錢(qián) 怎么去除地圖標(biāo)注 個(gè)人怎么在地圖標(biāo)注需要的店鋪 百度地圖標(biāo)注早餐區(qū)域 新岸線(xiàn)智能電銷(xiāo)機(jī)器人 清朝地圖標(biāo)注哈爾濱 地圖標(biāo)注大廈 漳州智云呼電話(huà)機(jī)器人

概述

    在Lua中有8種基礎(chǔ)類(lèi)型:nil、boolean、number、string、userdata、function、thread和table??梢允褂煤瘮?shù)type查看某個(gè)變量或值的類(lèi)型,返回相應(yīng)的類(lèi)型名稱(chēng)。像其他動(dòng)態(tài)語(yǔ)言一樣,在語(yǔ)言中沒(méi)有類(lèi)型定義的語(yǔ)法,每個(gè)值都攜帶了它自身的類(lèi)型信息。下面將通過(guò)Lua 5.2.1的源碼來(lái)看類(lèi)型的實(shí)現(xiàn)。

   源碼實(shí)現(xiàn)

     Lua將值表示成帶標(biāo)志的聯(lián)合結(jié)構(gòu),代碼如下(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 }; 

可以看出結(jié)構(gòu)體有兩個(gè)成員:

    一個(gè)是整型的tt_用來(lái)表示數(shù)據(jù)類(lèi)型,Lua中所有的數(shù)據(jù)類(lèi)型定義如下(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 

可以看到實(shí)現(xiàn)了9種數(shù)據(jù)類(lèi)型,其中把語(yǔ)法中userdata分為L(zhǎng)UA_TLIGHTUSERDATA和LUA_TUSERDATA,其中前一種類(lèi)型即為輕量級(jí)userdata(light userdata),輕量級(jí)userdata是一種表示C指針的值,對(duì)Lua虛擬機(jī)來(lái)說(shuō),這種數(shù)據(jù)類(lèi)型不需要GC(垃圾回收),其指向的內(nèi)存由用戶(hù)分配和釋放;后一種userdata類(lèi)型完全userdata(full userdata),內(nèi)存是由Lua虛擬機(jī)分配,并有GC機(jī)制負(fù)責(zé)處理。

 結(jié)構(gòu)體lua_TValue另一個(gè)數(shù)據(jù)成員是value_,它是一個(gè)聯(lián)合體,代碼如下(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 }; 

通過(guò)注釋?zhuān)梢院苋菀桌斫饷總€(gè)成員的含義,但有必要對(duì)以下幾個(gè)成員說(shuō)明:

    numfield:用來(lái)表示所有數(shù)值,其實(shí)質(zhì)對(duì)應(yīng)的是double類(lèi)型。包括整型也是用這個(gè)來(lái)表示。另外在Lua 5.3實(shí)現(xiàn),分開(kāi)了整型和浮點(diǎn)數(shù)的表示。

    GCObject *gc:用來(lái)指向那些需要垃圾回收的對(duì)象,包括string、table、function、完全userdata和thread類(lèi)型。GCObject用來(lái)表示可以垃圾回收的對(duì)象,它也是一個(gè)聯(lián)合體,其代碼如下(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回收機(jī)制使用。其他成員比如TString ts才是真正存儲(chǔ)值的結(jié)構(gòu),而這些數(shù)據(jù)結(jié)構(gòu)也會(huì)有GCheader,用于GC管理。

    總的來(lái)說(shuō),Lua中各種數(shù)值類(lèi)型結(jié)構(gòu)如下:

    最后,關(guān)于Lua的數(shù)據(jù)類(lèi)型實(shí)現(xiàn),值得指出使用帶標(biāo)志的結(jié)構(gòu)體來(lái)表示Lua的數(shù)值類(lèi)型,使得Lua中任何一種數(shù)據(jù)類(lèi)型至少占用的空間是個(gè)16字節(jié)(結(jié)構(gòu)體還需要對(duì)其),就算nil類(lèi)型,也會(huì)占用8個(gè)字節(jié)的空間,因此拷貝Lua值是比較耗時(shí)的。下一篇文章將討論Lua字符串的實(shí)現(xiàn)。

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

您可能感興趣的文章:
  • 詳解Lua中的數(shù)據(jù)類(lèi)型
  • Lua判斷數(shù)據(jù)類(lèi)型的方法
  • Lua數(shù)據(jù)類(lèi)型介紹
  • Lua中的基本數(shù)據(jù)類(lèi)型詳細(xì)介紹
  • Lua學(xué)習(xí)筆記之?dāng)?shù)據(jù)類(lèi)型
  • 深入探究Lua中的解析表達(dá)式
  • Lua教程(三):表達(dá)式和語(yǔ)句
  • Lua學(xué)習(xí)筆記之表達(dá)式
  • Lua表達(dá)式和控制結(jié)構(gòu)學(xué)習(xí)筆記
  • Lua中的操作符和表達(dá)式總結(jié)
  • Lua基礎(chǔ)教程之賦值語(yǔ)句、表達(dá)式、流程控制、函數(shù)學(xué)習(xí)筆記
  • Lua學(xué)習(xí)筆記之運(yùn)算符和表達(dá)式
  • Lua中基本的數(shù)據(jù)類(lèi)型、表達(dá)式與流程控制語(yǔ)句講解

標(biāo)簽:天門(mén) 德宏 濰坊 宣城 天門(mén) 儋州 臺(tái)灣 金昌

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《實(shí)現(xiàn)Lua中數(shù)據(jù)類(lèi)型的源碼分享》,本文關(guān)鍵詞  實(shí)現(xiàn),Lua,中,數(shù)據(jù),類(lèi)型,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《實(shí)現(xiàn)Lua中數(shù)據(jù)類(lèi)型的源碼分享》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于實(shí)現(xiàn)Lua中數(shù)據(jù)類(lèi)型的源碼分享的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章