lua 원본 연구 세부 기록
2154 단어 학습 과정
# Enable GC64 mode for x64.
#XCFLAGS+= -DLUAJIT_ENABLE_GC64
llimits.h
#define lua_lock(L) ((void)0)
#define lua_unlock(L) ((void) 0)
。 pthread :
lstate.h , GlobalState :
pthread_mutex_t lock;
lua_newstate :
pthread_mutex_init(&g->lock, NULL);
lock/unlock ( ):
#define lua_lock(L) pthread_mutex_lock(&(G(L)->lock));
#define lua_unlock(L) pthread_mutex_unlock(&(G(L)->lock));
close_state :
static void close_state (lua_State *L) {
global_State *g = G(L);
luaF_close(L, L->stack); /* close all upvalues for this thread */
luaC_freeallobjects(L); /* collect all objects */
luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size);
luaZ_freebuffer(L, &g->buff);
freestack(L);
lua_assert(gettotalbytes(g) == sizeof(LG));
pthread_mutex_unlock(&g->lock);
pthread_mutex_destroy(&g->lock);
(*g->frealloc)(g->ud, fromstate(L), sizeof(LG), 0); /* free main block */
}
static LJ_AINLINE uint32_t lj_str_hash(const char* str, size_t len)
{
if (len < 128) {
if (len >= 16) { /* [16, 128) */
return lj_str_hash_16_128(str, len);
}
if (len >= 4) { /* [4, 16) */
return lj_str_hash_4_16(str, len);
}
/* [0, 4) */
return lj_str_hash_1_4(str, len);
}
/* [128, inf) */
return lj_str_hash_128_above(str, len);
}
원래 버전 luajit
if (len >= 4) { /* Caveat: unaligned access! */
a = lj_getu32(str);
h ^= lj_getu32(str+len-4);
b = lj_getu32(str+(len>>1)-2);
h ^= b; h -= lj_rol(b, 14);
b += lj_getu32(str+(len>>2)-1);
} else if (len > 0) {
a = *(const uint8_t *)str;
h ^= *(const uint8_t *)(str+len-1);
b = *(const uint8_t *)(str+(len>>1));
h ^= b; h -= lj_rol(b, 14);
} else {
return &g->strempty;
}
그 다음에 문자열 연결을 줄이고 테이블 연결을 사용합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Go - iris 프레임 워 크 핵심 내용목차 Iris 프레임 워 크 1. 아이 리 스 소개 2. Iris 인 스 턴 스 데모 3. Get, Post, Put, Delete Iris 프레임 워 크 1. 아이 리 스 소개 Go 의 웹 프레임 워 크 는 실행 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.