lua 5.3.4 GC管理對象類型的變化

Lua 5.1.4

判斷是否需要GC:

#define ttype(o)    ((o)->tt)
#define iscollectable(o)    (ttype(o) >= LUA_TSTRING)

GC對象GCObject union:

/*
** Union of all collectable objects
*/
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 */
};

作為 GC 對象被虛擬機的 標(biāo)記-清除 GC 所管理的類型有:

  1. string
  2. userdata
  3. Closure(function)
  4. table
  5. thread
  6. Proto
  7. UpVal

Lua 5.3.4

#define TValuefields    Value value_; int tt_

struct lua_TValue {
  TValuefields;
};

typedef struct lua_TValue TValue;

==> TValue =

struct lua_TValue {
      Value value_; 
      int tt_;
    };

其中斯稳,tt_是tag type的簡寫,復(fù)合類型聂儒,用來表示類型,一共包含三個部分外驱,分別是:

/*
** tags for Tagged Values have the following use of bits:
** bits 0-3: actual tag (a LUA_T* value) 
** bits 4-5: variant bits 
** bit 6: whether value is collectable 
*/
  1. 0-3表示大類型
  2. 4-5表示表示類型的變體刻剥,例如:字符串LUA_TSTRING有兩種變體(短字符串:LUA_TSHRSTR和長字符串:LUA_TLNGSTR)
  3. 6表示是否可以垃圾回收

標(biāo)記為需標(biāo)記-清除 GC 所管理的對象:

#define BIT_ISCOLLECTABLE   (1 << 6) = 64 = 0100 0000

/* mark a tag as collectable */
#define ctb(t)          ((t) | BIT_ISCOLLECTABLE)

判斷是否需要GC:

#define rttype(o)   ((o)->tt_)

#define iscollectable(o)    (rttype(o) & BIT_ISCOLLECTABLE)

GC對象union:

/*
** Union of all collectable objects (only for conversions)
*/
union GCUnion {
  GCObject gc;  /* common header */
  struct TString ts;
  struct Udata u;
  union Closure cl;
  struct Table h;
  struct Proto p;
  struct lua_State th;  /* thread */
};

作為 GC 對象被虛擬機的 標(biāo)記-清除 GC 所管理的類型有:

  1. string
  2. userdata
  3. Closure(function)
  4. table
  5. thread
  6. Proto

要注意的是:

UpVal 對象不再作為 GC 對象被虛擬機的 標(biāo)記-清除GC 所管理遮咖,而是單獨使用引用計數(shù)的方法管理。

鏈接:UpVal變?yōu)橐糜嫈?shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末造虏,一起剝皮案震驚了整個濱河市御吞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酗电,老刑警劉巖魄藕,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異撵术,居然都是意外死亡背率,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門嫩与,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寝姿,“玉大人,你說我怎么就攤上這事划滋《” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵处坪,是天一觀的道長根资。 經(jīng)常有香客問我,道長同窘,這世上最難降的妖魔是什么玄帕? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮想邦,結(jié)果婚禮上裤纹,老公的妹妹穿的比我還像新娘。我一直安慰自己丧没,他們只是感情好鹰椒,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呕童,像睡著了一般漆际。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拉庵,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天灿椅,我揣著相機與錄音套蒂,去河邊找鬼钞支。 笑死茫蛹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的烁挟。 我是一名探鬼主播婴洼,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撼嗓!你這毒婦竟也來了柬采?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤且警,失蹤者是張志新(化名)和其女友劉穎粉捻,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斑芜,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡肩刃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了杏头。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盈包。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖醇王,靈堂內(nèi)的尸體忽然破棺而出呢燥,到底是詐尸還是另有隱情,我是刑警寧澤寓娩,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布叛氨,位于F島的核電站,受9級特大地震影響棘伴,放射性物質(zhì)發(fā)生泄漏寞埠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一排嫌、第九天 我趴在偏房一處隱蔽的房頂上張望畸裳。 院中可真熱鬧,春花似錦淳地、人聲如沸怖糊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伍伤。三九已至,卻和暖如春遣钳,著一層夾襖步出監(jiān)牢的瞬間扰魂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留劝评,地道東北人姐直。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像蒋畜,于是被迫代替她去往敵國和親声畏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容