From 89881e901ab042275ba5c841f31ca54844f9b780 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 12 Apr 2016 21:34:18 -0400 Subject: [PATCH] Experimenting with a medium object heap --- gc.c | 3 +++ include/cyclone/types.h | 1 + runtime.c | 1 + 3 files changed, 5 insertions(+) diff --git a/gc.c b/gc.c index 3e7b36fd..9357f1da 100644 --- a/gc.c +++ b/gc.c @@ -438,6 +438,8 @@ void *gc_alloc(gc_heap_root *hrt, size_t size, char *obj, gc_thread_data *thd, i size = gc_heap_align(size); if (size <= 32){ h = hrt->small_obj_heap; + } else if (size <= 64) { + h = hrt->medium_obj_heap; } else { h = hrt->heap; } @@ -1199,6 +1201,7 @@ fprintf(stderr, "DEBUG - after wait_handshake async\n"); //sweep : max_freed = gc_sweep(gc_get_heap()->heap, &freed); max_freed = gc_sweep(gc_get_heap()->small_obj_heap, &freed); + max_freed = gc_sweep(gc_get_heap()->medium_obj_heap, &freed); total_size = cached_heap_total_size; //gc_heap_total_size(gc_get_heap()); total_free = cached_heap_free_size; //gc_heap_total_free_size(gc_get_heap()); diff --git a/include/cyclone/types.h b/include/cyclone/types.h index a4a8c8fc..4ee92caf 100644 --- a/include/cyclone/types.h +++ b/include/cyclone/types.h @@ -131,6 +131,7 @@ struct gc_heap_t { typedef struct gc_heap_root_t gc_heap_root; struct gc_heap_root_t { gc_heap *small_obj_heap; + gc_heap *medium_obj_heap; gc_heap *heap; }; diff --git a/runtime.c b/runtime.c index 8209aa12..a649f5fc 100644 --- a/runtime.c +++ b/runtime.c @@ -168,6 +168,7 @@ void gc_init_heap(long heap_size) Cyc_heap = malloc(sizeof(gc_heap_root)); Cyc_heap->heap = gc_heap_create(heap_size, 0, 0); Cyc_heap->small_obj_heap = gc_heap_create(heap_size, 0, 0); + Cyc_heap->medium_obj_heap = gc_heap_create(heap_size, 0, 0); if (!ck_hs_init(&symbol_table, CK_HS_MODE_OBJECT | CK_HS_MODE_SPMC,