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 객체로 태그 지정 - GC 지우기가 관리하는 유형은 다음과 같습니다.
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_;
};
여기서 tttag type의 약자, 복합 유형
/*
** 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
*/
#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 객체로 태그 지정 - GC 지우기가 관리하는 유형은 다음과 같습니다.
주의해야 할 점:
UpVal 객체는 더 이상 가상 머신에서 GC 객체로 태그 지정되지 않으며 GC에서 관리되는 GC를 지우는 대신 참조 수를 사용하여 개별적으로 관리됩니다.
링크:UpVal에서 참조 수로 변경
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.