Skip to content

Instantly share code, notes, and snippets.

@holmeshe
holmeshe / comparison.csv
Last active January 10, 2023 21:46
RN Flutter xLua PureTS
ReactNative Flutter xLua PureTS
Programming language React Dart lua TS
Running environment JS (JSCore/Hermes) Flutter engine Unity Unity+JS(Quick JS)
Supporting platforms Android + iOS + Web Android + iOS + Web Android + iOS Android + iOS
Ecosystem Rich (React) Less than React Small Small
Iconic Apps JD Meituan Trip Xianyu Meituan Unity games Tencent Pandora
OTA Supported Need alteration Supported Supported
Stability Stable (Since 2015) Stable (Since 2017) Stable Relatively stable(2020)
CI/CD Easy Hard Meidum Medium
Learning curve Easy Medium Hard Hard
static void slabs_preallocate (const unsigned int maxslabs) {
int i;
unsigned int prealloc = 0;
/* pre-allocate a 1MB slab in every size class so people don't get
confused by non-intuitive "SERVER_ERROR out of memory"
messages. this is the most common question on the mailing
list. if you really don't want this, you can rebuild without
these three lines. */
void slabs_init(const size_t limit, const double factor, const bool prealloc, const uint32_t *slab_sizes) {
...
if (prealloc) {
slabs_preallocate(power_largest);
}
}
static void do_slabs_free(void *ptr, const size_t size, unsigned int id) {
slabclass_t *p;
item *it;
...
p = &slabclass[id];
it = (item *)ptr;
it->it_flags = ITEM_SLABBED; // scr: ---------------> 1)
it->slabs_clsid = 0;
it->prev = 0; // scr: ------------------------------> 2)
static void split_slab_page_into_freelist(char *ptr, const unsigned int id) {
slabclass_t *p = &slabclass[id];
int x;
for (x = 0; x < p->perslab; x++) {
do_slabs_free(ptr, 0, id);
ptr += p->size;
}
}
static int grow_slab_list (const unsigned int id) {
slabclass_t *p = &slabclass[id];
if (p->slabs == p->list_size) {
size_t new_size = (p->list_size != 0) ? p->list_size * 2 : 16;
void *new_list = realloc(p->slab_list, new_size * sizeof(void *));
if (new_list == 0) return 0;
p->list_size = new_size;
p->slab_list = new_list;
}
return 1;
static int do_slabs_newslab(const unsigned int id) {
slabclass_t *p = &slabclass[id]; // scr: ----------------------------> 1)
slabclass_t *g = &slabclass[SLAB_GLOBAL_PAGE_POOL]; // scr: ---------> *)
int len = settings.slab_reassign ? settings.item_size_max // scr: ---> 2)
: p->size * p->perslab;
char *ptr;
if ((mem_limit && mem_malloced + len > mem_limit && p->slabs > 0 // -> 3)
&& g->slabs == 0)) {
mem_limit_reached = true;
...
bool preallocate = false;
...
case 'L' :
if (enable_large_pages() == 0) {
preallocate = true;
} else {
fprintf(stderr, "Cannot enable large pages on this system\n"
"(There is no Linux support as of this version)\n");
return 1;
static size_t mem_limit = 0;
...
settings.maxbytes = 64 * 1024 * 1024; /* default is 64MB */
...
case 'm':
settings.maxbytes = ((size_t)atoi(optarg)) * 1024 * 1024;
break;
...
void slabs_init(const size_t limit, const double factor, const bool prealloc, const uint32_t *slab_sizes) {
...
mem_limit = limit; // scr: here
...