lua原始碼研究一些細節記錄

2021-09-27 07:47:21 字數 990 閱讀 9886

# 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)

static lj_ainline uint32_t lj_str_hash(const char* str, size_t len)

if (len >= 4)

/* [0, 4) */

return lj_str_hash_1_4(str, len);

} /* [128, inf) */

return lj_str_hash_128_above(str, len);

}

luajit原始版本

if (len >= 4)  else if (len > 0)  else
其次減少字串拼接,用table拼接。

閱讀Vector原始碼記錄的一些筆記

在多執行緒的情況下,arraylist和linkedlist都是執行緒不安全的,vector是執行緒安全的,arraylist是基於陣列實現的,linkedlist是基於雙向鍊錶實現,而vector的實現也是基於陣列的,從資料結構來看,vector和arraylist應該很像,實時也是如此,基本上兩...

記錄一些爬蟲的小細節

1.使用beautifulsoup初始化用requests獲取到的html文字時,有時候會出現亂碼現象,只需要指定response.encoding utf 8 即可 2.有時候使用selenium定位元素時,定位 沒有問題,但是提示定位不到,這是因為頁面中存在多個iframe標籤,相當於多個子頁面...

C 一些細節

include include pthread.h using namespace std static pthread mutex t mutex class single class single public static single instance static single getin...