3 #ifndef __MEMORYALLOCATOR_H__
4 #define __MEMORYALLOCATOR_H__
10 #define UCHAR unsigned char
36 #ifdef WITH_CXX_GUARDEDALLOC
37 MEM_CXX_CLASS_ALLOC_FUNCS(
"DUALCON:VirtualMemoryAllocator")
49 int HEAP_UNIT, HEAP_MASK;
72 void allocateDataBlock()
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 *));
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 #ifdef WITH_CXX_GUARDEDALLOC
198 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