5#ifndef __MEMORYALLOCATOR_H__
6#define __MEMORYALLOCATOR_H__
14#define UCHAR unsigned char
38 MEM_CXX_CLASS_ALLOC_FUNCS(
"DUALCON:VirtualMemoryAllocator")
49 int HEAP_UNIT, HEAP_MASK;
72 void allocateDataBlock()
76 data = (
UCHAR **)realloc(data,
sizeof(
UCHAR *) * datablocknum);
77 data[datablocknum - 1] = (
UCHAR *)malloc(HEAP_UNIT *
N);
80 for (
int i = 0;
i < HEAP_UNIT;
i++) {
81 stack[0][
i] = (data[datablocknum - 1] +
i *
N);
83 available = HEAP_UNIT;
89 void allocateStackBlock()
93 stacksize += HEAP_UNIT;
94 stack = (
UCHAR ***)realloc(stack,
sizeof(
UCHAR **) * stackblocknum);
95 stack[stackblocknum - 1] = (
UCHAR **)malloc(HEAP_UNIT *
sizeof(
UCHAR *));
108 data[0] = (
UCHAR *)malloc(HEAP_UNIT *
N);
112 stack[0] = (
UCHAR **)malloc(HEAP_UNIT *
sizeof(
UCHAR *));
114 stacksize = HEAP_UNIT;
115 available = HEAP_UNIT;
117 for (
int i = 0;
i < HEAP_UNIT;
i++) {
118 stack[0][
i] = (data[0] +
i *
N);
128 for (
i = 0;
i < datablocknum;
i++) {
131 for (
i = 0;
i < stackblocknum;
i++) {
143 if (available == 0) {
149 return (
void *)stack[available >>
HEAP_BASE][available & HEAP_MASK];
157 if (available == stacksize) {
158 allocateStackBlock();
162 stack[available >>
HEAP_BASE][available & HEAP_MASK] = (
UCHAR *)obj;
172 printf(
"Bytes: %d Used: %d Allocated: %d Maxfree: %d\n",
184 return HEAP_UNIT * datablocknum - available;
189 return HEAP_UNIT * datablocknum;
197 MEM_CXX_CLASS_ALLOC_FUNCS(
"DUALCON:MemoryAllocator")
void BLI_kdtree_nd_ free(KDTree *tree)
Read Guarded memory(de)allocation.
void * allocate() override
void printInfo() override
int getAllocated() override
void deallocate(void *obj) override
virtual int getAllocated()=0
virtual ~VirtualMemoryAllocator()=default
virtual void * allocate()=0
virtual void deallocate(void *obj)=0
virtual void printInfo()=0