diff options
| author | Karsten Schmidt <k@postspectacular.com> | 2017-07-15 12:12:34 +0100 |
|---|---|---|
| committer | Karsten Schmidt <k@postspectacular.com> | 2017-07-15 12:25:51 +0100 |
| commit | feef1bae13fa929fef3deda18d676cd25363a50e (patch) | |
| tree | 1ec97eab26e09fc637f4467c3ae0a55b9bd19cb8 /tinyalloc.c | |
| parent | b838efb48972bc975c609179f261119a5f247a8c (diff) | |
remove various functions if TA_DISABLE_COMPACT, update ptr casts, update readme
Diffstat (limited to 'tinyalloc.c')
| -rw-r--r-- | tinyalloc.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/tinyalloc.c b/tinyalloc.c index 93d568d..9b07461 100644 --- a/tinyalloc.c +++ b/tinyalloc.c @@ -52,9 +52,13 @@ typedef struct { static Heap *heap = (Heap *)TA_BASE; /** - * Insert block into free list, sorted by addr. + * If compaction is enabled, inserts block + * into free list, sorted by addr. + * If disabled, add block has new head of + * the free list. */ static void insert_block(Block *block) { +#ifndef TA_DISABLE_COMPACT Block *ptr = heap->free; Block *prev = NULL; while (ptr != NULL) { @@ -76,8 +80,13 @@ static void insert_block(Block *block) { heap->free = block; } block->next = ptr; +#else + block->next = heap->free; + heap->free = block; +#endif } +#ifndef TA_DISABLE_COMPACT static void release_blocks(Block *scan, Block *to) { Block *scan_next; while (scan != to) { @@ -92,15 +101,13 @@ static void release_blocks(Block *scan, Block *to) { } } -#ifndef TA_DISABLE_COMPACT static void compact() { Block *ptr = heap->free; Block *prev; Block *scan; while (ptr != NULL) { - prev = ptr; - scan = ptr->next; - size_t base = (size_t)ptr->addr; + prev = ptr; + scan = ptr->next; while (scan != NULL && (size_t)prev->addr + prev->size == (size_t)scan->addr) { print_s("merge"); @@ -109,7 +116,8 @@ static void compact() { scan = scan->next; } if (prev != ptr) { - size_t new_size = prev->addr + prev->size - ptr->addr; + size_t new_size = + (size_t)prev->addr - (size_t)ptr->addr + prev->size; print_s("new size"); print_i(new_size); ptr->size = new_size; @@ -186,7 +194,7 @@ static Block *alloc_block(size_t num) { ptr->size = num; Block *split = heap->fresh; heap->fresh = split->next; - split->addr = ptr->addr + num; + split->addr = (void *)((size_t)ptr->addr + num); print_s("split"); print_i((size_t)split->addr); split->size = excess; |
