From 03035c98b4ba3297b837e96080e78e0aac1e86db Mon Sep 17 00:00:00 2001 From: Aleksa Vučković Date: Mon, 31 Jan 2022 11:16:38 +0100 Subject: Promene --- include/08.heap/heap23.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 include/08.heap/heap23.c (limited to 'include/08.heap/heap23.c') diff --git a/include/08.heap/heap23.c b/include/08.heap/heap23.c new file mode 100644 index 0000000..70305b7 --- /dev/null +++ b/include/08.heap/heap23.c @@ -0,0 +1,21 @@ + for (b = heap->fblock; b; b = b->next) + { + if ((uintptr_t)ptr > (uintptr_t)b && (uintptr_t)ptr < (uintptr_t)b + + sizeof(KHEAPBLOCKBM) + b->size) { + /* found block */ + ptroff = (uintptr_t)ptr - (uintptr_t)&b[1]; /* get offset to get + block */ + /* block offset in BM */ + bi = ptroff / b->bsize; + /* .. */ + bm = (uint8_t*)&b[1]; + /* clear allocation */ + id = bm[bi]; + /* oddly.. GCC did not optimize this */ + max = b->size / b->bsize; + for (x = bi; bm[x] == id && x < max; ++x) bm[x] = 0; + /* update free block count */ + b->used -= x - bi; + return; + } + } -- cgit v1.2.3