17 #ifndef __MEMORYALLOCATOR_H__
18 #define __MEMORYALLOCATOR_H__
24 #define UCHAR unsigned char
50 #ifdef WITH_CXX_GUARDEDALLOC
51 MEM_CXX_CLASS_ALLOC_FUNCS(
"DUALCON:VirtualMemoryAllocator")
63 int HEAP_UNIT, HEAP_MASK;
86 void allocateDataBlock()
91 data[datablocknum - 1] = (
UCHAR *)malloc(HEAP_UNIT *
N);
94 for (
int i = 0; i < HEAP_UNIT; i++) {
95 stack[0][i] = (
data[datablocknum - 1] + i *
N);
97 available = HEAP_UNIT;
103 void allocateStackBlock()
107 stacksize += HEAP_UNIT;
108 stack = (
UCHAR ***)realloc(stack,
sizeof(
UCHAR **) * stackblocknum);
109 stack[stackblocknum - 1] = (
UCHAR **)malloc(HEAP_UNIT *
sizeof(
UCHAR *));
126 stack[0] = (
UCHAR **)malloc(HEAP_UNIT *
sizeof(
UCHAR *));
128 stacksize = HEAP_UNIT;
129 available = HEAP_UNIT;
131 for (
int i = 0; i < HEAP_UNIT; i++) {
132 stack[0][i] = (
data[0] + i *
N);
142 for (i = 0; i < datablocknum; i++) {
145 for (i = 0; i < stackblocknum; i++) {
157 if (available == 0) {
163 return (
void *)stack[available >>
HEAP_BASE][available & HEAP_MASK];
171 if (available == stacksize) {
172 allocateStackBlock();
176 stack[available >>
HEAP_BASE][available & HEAP_MASK] = (
UCHAR *)obj;
186 printf(
"Bytes: %d Used: %d Allocated: %d Maxfree: %d\n",
198 return HEAP_UNIT * datablocknum - available;
203 return HEAP_UNIT * datablocknum;
211 #ifdef WITH_CXX_GUARDEDALLOC
212 MEM_CXX_CLASS_ALLOC_FUNCS(
"DUALCON:MemoryAllocator")
void BLI_kdtree_nd_() free(KDTree *tree)
void deallocate(void *obj)
virtual int getAllocated()=0
virtual ~VirtualMemoryAllocator()
virtual void * allocate()=0
virtual void deallocate(void *obj)=0
virtual void printInfo()=0