mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-24 04:25:06 +02:00
Only use 96-byte object heap on 64-bit platforms
This commit is contained in:
parent
4049304095
commit
560667eef6
3 changed files with 12 additions and 27 deletions
31
gc.c
31
gc.c
|
@ -572,23 +572,12 @@ void *gc_alloc(gc_heap_root * hrt, size_t size, char *obj, gc_thread_data * thd,
|
||||||
heap_type = HEAP_SM;
|
heap_type = HEAP_SM;
|
||||||
} else if (size <= 64) {
|
} else if (size <= 64) {
|
||||||
heap_type = HEAP_64;
|
heap_type = HEAP_64;
|
||||||
/*
|
// Only use this heap on 64-bit platforms, where larger objs are used more often
|
||||||
TODO:
|
// Code from http://stackoverflow.com/a/32717129/101258
|
||||||
from http://stackoverflow.com/a/32717129/101258
|
|
||||||
#if INTPTR_MAX == INT64_MAX
|
#if INTPTR_MAX == INT64_MAX
|
||||||
// 64-bit
|
|
||||||
#elif INTPTR_MAX == INT32_MAX
|
|
||||||
// 32-bit
|
|
||||||
#else
|
|
||||||
#error Unknown pointer size or missing size macros!
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
} else if (size <= 96) {
|
} else if (size <= 96) {
|
||||||
heap_type = HEAP_96;
|
heap_type = HEAP_96;
|
||||||
// } else if (size <= 128) {
|
#endif
|
||||||
// heap_type = HEAP_128;
|
|
||||||
// } else if (size <= 160) {
|
|
||||||
// heap_type = HEAP_160;
|
|
||||||
} else if (size >= MAX_STACK_OBJ) {
|
} else if (size >= MAX_STACK_OBJ) {
|
||||||
heap_type = HEAP_HUGE;
|
heap_type = HEAP_HUGE;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1066,12 +1055,10 @@ void gc_mut_cooperate(gc_thread_data * thd, int buf_len)
|
||||||
cached_heap_total_sizes[HEAP_SM] * GC_COLLECTION_THRESHOLD) ||
|
cached_heap_total_sizes[HEAP_SM] * GC_COLLECTION_THRESHOLD) ||
|
||||||
(cached_heap_free_sizes[HEAP_64] <
|
(cached_heap_free_sizes[HEAP_64] <
|
||||||
cached_heap_total_sizes[HEAP_64] * GC_COLLECTION_THRESHOLD) ||
|
cached_heap_total_sizes[HEAP_64] * GC_COLLECTION_THRESHOLD) ||
|
||||||
|
#if INTPTR_MAX == INT64_MAX
|
||||||
(cached_heap_free_sizes[HEAP_96] <
|
(cached_heap_free_sizes[HEAP_96] <
|
||||||
cached_heap_total_sizes[HEAP_96] * GC_COLLECTION_THRESHOLD) ||
|
cached_heap_total_sizes[HEAP_96] * GC_COLLECTION_THRESHOLD) ||
|
||||||
// (cached_heap_free_sizes[HEAP_128] <
|
#endif
|
||||||
// cached_heap_total_sizes[HEAP_128] * GC_COLLECTION_THRESHOLD) ||
|
|
||||||
// (cached_heap_free_sizes[HEAP_160] <
|
|
||||||
// cached_heap_total_sizes[HEAP_160] * GC_COLLECTION_THRESHOLD) ||
|
|
||||||
(cached_heap_free_sizes[HEAP_REST] <
|
(cached_heap_free_sizes[HEAP_REST] <
|
||||||
cached_heap_total_sizes[HEAP_REST] * GC_COLLECTION_THRESHOLD))) {
|
cached_heap_total_sizes[HEAP_REST] * GC_COLLECTION_THRESHOLD))) {
|
||||||
#if GC_DEBUG_TRACE
|
#if GC_DEBUG_TRACE
|
||||||
|
@ -1438,15 +1425,15 @@ void gc_collector()
|
||||||
#if GC_DEBUG_TRACE
|
#if GC_DEBUG_TRACE
|
||||||
total_size = cached_heap_total_sizes[HEAP_SM] +
|
total_size = cached_heap_total_sizes[HEAP_SM] +
|
||||||
cached_heap_total_sizes[HEAP_64] +
|
cached_heap_total_sizes[HEAP_64] +
|
||||||
|
#if INTPTR_MAX == INT64_MAX
|
||||||
cached_heap_total_sizes[HEAP_96] +
|
cached_heap_total_sizes[HEAP_96] +
|
||||||
// cached_heap_total_sizes[HEAP_128] +
|
#endif
|
||||||
// cached_heap_total_sizes[HEAP_160] +
|
|
||||||
cached_heap_total_sizes[HEAP_REST];
|
cached_heap_total_sizes[HEAP_REST];
|
||||||
total_free = cached_heap_free_sizes[HEAP_SM] +
|
total_free = cached_heap_free_sizes[HEAP_SM] +
|
||||||
cached_heap_free_sizes[HEAP_64] +
|
cached_heap_free_sizes[HEAP_64] +
|
||||||
|
#if INTPTR_MAX == INT64_MAX
|
||||||
cached_heap_free_sizes[HEAP_96] +
|
cached_heap_free_sizes[HEAP_96] +
|
||||||
// cached_heap_free_sizes[HEAP_128] +
|
#endif
|
||||||
// cached_heap_free_sizes[HEAP_160] +
|
|
||||||
cached_heap_free_sizes[HEAP_REST];
|
cached_heap_free_sizes[HEAP_REST];
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"sweep done, total_size = %zu, total_free = %zu, freed = %zu, elapsed = %ld\n",
|
"sweep done, total_size = %zu, total_free = %zu, freed = %zu, elapsed = %ld\n",
|
||||||
|
|
|
@ -172,8 +172,6 @@ typedef enum {
|
||||||
HEAP_SM = 0 // 32 byte objects (min gc_heap_align)
|
HEAP_SM = 0 // 32 byte objects (min gc_heap_align)
|
||||||
, HEAP_64
|
, HEAP_64
|
||||||
, HEAP_96
|
, HEAP_96
|
||||||
// , HEAP_128
|
|
||||||
// , HEAP_160
|
|
||||||
, HEAP_REST // Everything else
|
, HEAP_REST // Everything else
|
||||||
, HEAP_HUGE // Huge objects, 1 per page
|
, HEAP_HUGE // Huge objects, 1 per page
|
||||||
} gc_heap_type;
|
} gc_heap_type;
|
||||||
|
|
|
@ -214,9 +214,9 @@ void gc_init_heap(long heap_size)
|
||||||
Cyc_heap->heap[HEAP_REST] = gc_heap_create(HEAP_REST, initial_heap_size, 0, 0);
|
Cyc_heap->heap[HEAP_REST] = gc_heap_create(HEAP_REST, initial_heap_size, 0, 0);
|
||||||
Cyc_heap->heap[HEAP_SM] = gc_heap_create(HEAP_SM, initial_heap_size, 0, 0);
|
Cyc_heap->heap[HEAP_SM] = gc_heap_create(HEAP_SM, initial_heap_size, 0, 0);
|
||||||
Cyc_heap->heap[HEAP_64] = gc_heap_create(HEAP_64, initial_heap_size, 0, 0);
|
Cyc_heap->heap[HEAP_64] = gc_heap_create(HEAP_64, initial_heap_size, 0, 0);
|
||||||
|
if (sizeof(void *) == 8) { // Only use this heap on 64-bit platforms
|
||||||
Cyc_heap->heap[HEAP_96] = gc_heap_create(HEAP_96, initial_heap_size, 0, 0);
|
Cyc_heap->heap[HEAP_96] = gc_heap_create(HEAP_96, initial_heap_size, 0, 0);
|
||||||
// Cyc_heap->heap[HEAP_128] = gc_heap_create(HEAP_128, initial_heap_size, 0, 0);
|
}
|
||||||
// Cyc_heap->heap[HEAP_160] = gc_heap_create(HEAP_160, initial_heap_size, 0, 0);
|
|
||||||
Cyc_heap->heap[HEAP_HUGE] = gc_heap_create(HEAP_HUGE, 1024, 0, 0);
|
Cyc_heap->heap[HEAP_HUGE] = gc_heap_create(HEAP_HUGE, 1024, 0, 0);
|
||||||
|
|
||||||
if (!ck_hs_init(&symbol_table,
|
if (!ck_hs_init(&symbol_table,
|
||||||
|
|
Loading…
Add table
Reference in a new issue