feat(runtime/alloc): auxiliary functions for new runtime

This commit is contained in:
Leonardo de Moura 2019-08-21 10:44:40 -07:00
parent 0ab8631cf1
commit 94c69fff2b
2 changed files with 23 additions and 6 deletions

View file

@ -51,6 +51,7 @@ struct page_header {
page * m_next;
page * m_prev;
void * m_free_list;
unsigned m_obj_size;
unsigned m_max_free;
unsigned m_num_free;
unsigned m_slot_idx;
@ -312,6 +313,7 @@ static page * alloc_page(heap * h, unsigned obj_size) {
p->m_header.m_heap = h;
page_list_insert(h->m_curr_page[slot_idx], p);
p->m_header.m_slot_idx = slot_idx;
p->m_header.m_obj_size = obj_size;
char * curr_free = p->m_data;
set_next_obj(curr_free, nullptr);
char * end = p->m_data + (LEAN_PAGE_SIZE - sizeof(page_header));
@ -400,12 +402,7 @@ void * alloc(size_t sz) {
return r;
}
void dealloc(void * o, size_t sz) {
LEAN_RUNTIME_STAT_CODE(g_num_dealloc++);
sz = align(sz, LEAN_OBJECT_SIZE_DELTA);
if (LEAN_UNLIKELY(sz > LEAN_MAX_SMALL_OBJECT_SIZE)) {
return free(o);
}
static inline void dealloc_small_core(void * o) {
LEAN_RUNTIME_STAT_CODE(g_num_small_dealloc++);
if (LEAN_UNLIKELY(g_heap == nullptr)) {
init_heap(false);
@ -425,6 +422,24 @@ void dealloc(void * o, size_t sz) {
}
}
void dealloc(void * o, size_t sz) {
LEAN_RUNTIME_STAT_CODE(g_num_dealloc++);
sz = align(sz, LEAN_OBJECT_SIZE_DELTA);
if (LEAN_UNLIKELY(sz > LEAN_MAX_SMALL_OBJECT_SIZE)) {
return free(o);
}
dealloc_small_core(o);
}
void dealloc_small(void * o) {
dealloc_small_core(o);
}
unsigned get_small_object_size(void * o) {
page * p = get_page_of(o);
return p->m_header.m_obj_size;
}
void initialize_alloc() {
#ifdef LEAN_SMALL_ALLOCATOR
g_heap_manager = new heap_manager();

View file

@ -11,6 +11,8 @@ namespace lean {
void init_thread_heap();
void * alloc(size_t sz);
void dealloc(void * o, size_t sz);
void dealloc_small(void * o);
unsigned get_small_object_size(void * o);
void initialize_alloc();
void finalize_alloc();
}