factor/vm/code_gc.hpp

39 lines
701 B
C++
Raw Normal View History

2009-05-04 02:46:13 -04:00
namespace factor
{
static const cell free_list_count = 16;
static const cell block_size_increment = 32;
2009-05-02 05:04:19 -04:00
2009-05-04 05:50:24 -04:00
struct heap_free_list {
free_heap_block *small_blocks[free_list_count];
2009-05-04 05:50:24 -04:00
free_heap_block *large_blocks;
2009-05-02 11:17:05 -04:00
};
2009-05-02 05:04:19 -04:00
2009-05-04 05:50:24 -04:00
struct heap {
segment *seg;
heap_free_list free;
2009-05-02 11:17:05 -04:00
};
2009-05-02 05:04:19 -04:00
2009-08-17 16:37:14 -04:00
typedef void (*heap_iterator)(heap_block *compiled,factorvm *vm);
2009-05-04 05:50:24 -04:00
inline static heap_block *next_block(heap *h, heap_block *block)
2009-05-02 05:04:19 -04:00
{
2009-05-04 05:50:24 -04:00
cell next = ((cell)block + block->size);
if(next == h->seg->end)
2009-05-02 05:04:19 -04:00
return NULL;
else
2009-05-04 05:50:24 -04:00
return (heap_block *)next;
2009-05-02 05:04:19 -04:00
}
2009-05-04 05:50:24 -04:00
inline static heap_block *first_block(heap *h)
2009-05-02 05:04:19 -04:00
{
2009-05-04 05:50:24 -04:00
return (heap_block *)h->seg->start;
2009-05-02 05:04:19 -04:00
}
2009-05-04 05:50:24 -04:00
inline static heap_block *last_block(heap *h)
2009-05-02 05:04:19 -04:00
{
2009-05-04 05:50:24 -04:00
return (heap_block *)h->seg->end;
2009-05-02 05:04:19 -04:00
}
2009-05-04 02:46:13 -04:00
}