mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-24 20:45:06 +02:00
Free empty heap pages
This commit is contained in:
parent
d362f15ede
commit
8a3ed8e1a0
1 changed files with 15 additions and 10 deletions
25
gc.c
25
gc.c
|
@ -224,7 +224,7 @@ gc_heap *gc_heap_free(gc_heap *page, gc_heap *prev_page)
|
||||||
{
|
{
|
||||||
// At least for now, do not free first page
|
// At least for now, do not free first page
|
||||||
if (prev_page == NULL || page == NULL) {
|
if (prev_page == NULL || page == NULL) {
|
||||||
return NULL;
|
return page;
|
||||||
}
|
}
|
||||||
//#if GC_DEBUG_PRINTFS
|
//#if GC_DEBUG_PRINTFS
|
||||||
fprintf(stderr, "DEBUG freeing heap page at addr: %p\n", page);
|
fprintf(stderr, "DEBUG freeing heap page at addr: %p\n", page);
|
||||||
|
@ -237,9 +237,14 @@ gc_heap *gc_heap_free(gc_heap *page, gc_heap *prev_page)
|
||||||
|
|
||||||
int gc_is_heap_empty(gc_heap *h)
|
int gc_is_heap_empty(gc_heap *h)
|
||||||
{
|
{
|
||||||
// TODO: this function does not work yet!!
|
gc_free_list *f;
|
||||||
if (h == NULL || h->free_list == NULL) return 1;
|
if (!h || !h->free_list) return 0;
|
||||||
return 0;
|
|
||||||
|
f = h->free_list;
|
||||||
|
if (f->size != 0 || !f->next) return 0;
|
||||||
|
|
||||||
|
f = f->next;
|
||||||
|
return (f->size + gc_heap_align(gc_free_chunk_size)) == h->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -776,12 +781,12 @@ size_t gc_sweep(gc_heap * h, int heap_type, size_t * sum_freed_ptr)
|
||||||
// TODO: with huge heaps, this becomes more important. one of the huge
|
// TODO: with huge heaps, this becomes more important. one of the huge
|
||||||
// pages only has one object, so it is likely that the page
|
// pages only has one object, so it is likely that the page
|
||||||
// will become free at some point and could be reclaimed.
|
// will become free at some point and could be reclaimed.
|
||||||
// if (gc_is_heap_empty(h)){
|
if (gc_is_heap_empty(h)){
|
||||||
// unsigned int h_size = h->size;
|
unsigned int h_size = h->size;
|
||||||
// gc_heap_free(h, prev_h);
|
h = gc_heap_free(h, prev_h);
|
||||||
// cached_heap_free_sizes[heap_type] -= h_size;
|
cached_heap_free_sizes[heap_type] -= h_size;
|
||||||
// cached_heap_total_sizes[heap_type] -= h_size;
|
cached_heap_total_sizes[heap_type] -= h_size;
|
||||||
// }
|
}
|
||||||
sum_freed += heap_freed;
|
sum_freed += heap_freed;
|
||||||
heap_freed = 0;
|
heap_freed = 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue