summaryrefslogtreecommitdiff
path: root/qstd
diff options
context:
space:
mode:
Diffstat (limited to 'qstd')
-rw-r--r--qstd/memory.c11
-rw-r--r--qstd/memory.h1
2 files changed, 12 insertions, 0 deletions
diff --git a/qstd/memory.c b/qstd/memory.c
index f245289..6ea43f7 100644
--- a/qstd/memory.c
+++ b/qstd/memory.c
@@ -209,6 +209,17 @@ void heap_free(
heap_free_aligned(h, p);
}
+int heap_block_size(void* ptr) {
+ unsigned char* a;
+ int f = ~((unsigned)-1 >> 1);
+ ptrdiff_t shift;
+ a = ptr;
+ shift = a[-1];
+ shift += 256 * shift == 0;
+ a -= shift;
+ return ((int*)a)[-1] & ~f;
+}
+
/*
void print_blocks(Heap* h) {
int i, o;
diff --git a/qstd/memory.h b/qstd/memory.h
index 26c0382..842cb49 100644
--- a/qstd/memory.h
+++ b/qstd/memory.h
@@ -53,4 +53,5 @@ void heap_free(
void* p
);
void heap_defrag(Heap* h);
+int heap_block_size(void* ptr);
#endif