18 #ifdef BT_DEBUG_MEMORY_ALLOCATIONS
19 int gNumAlignedAllocs = 0;
20 int gNumAlignedFree = 0;
21 int gTotalBytesAlignedAllocs = 0;
22 #endif //BT_DEBUG_MEMORY_ALLOCATIONST_DEBUG_ALLOCATIONS
37 #if defined(BT_HAS_ALIGNED_ALLOCATOR)
41 return _aligned_malloc(
size, (
size_t)alignment);
48 #elif defined(__CELLOS_LV2__)
53 return memalign(alignment,
size);
66 real = (
char *)
sAllocFunc(
size +
sizeof(
void *) + (alignment - 1));
70 *((
void **)(ret)-1) = (
void *)(real);
85 real = *((
void **)(ptr)-1);
106 #ifdef BT_DEBUG_MEMORY_ALLOCATIONS
108 static int allocations_id[10241024];
109 static int allocations_bytes[10241024];
110 static int mynumallocs = 0;
113 int btDumpMemoryLeaks()
117 for (
int i = 0; i < mynumallocs; i++)
119 printf(
"Error: leaked memory of allocation #%d (%d bytes)\n", allocations_id[i], allocations_bytes[i]);
120 totalLeak += allocations_bytes[i];
124 printf(
"Error: memory leaks: %d allocations were not freed and leaked together %d bytes\n", mynumallocs, totalLeak);
131 struct btDebugPtrMagic
145 printf(
"Whaat? size==0");
148 static int allocId = 0;
163 gTotalBytesAlignedAllocs +=
size;
166 int sz4prt = 4 *
sizeof(
void *);
174 p.cptr -=
sizeof(
void *);
175 *p.vptrptr = (
void *)real;
176 p.cptr -=
sizeof(
void *);
178 p.cptr -=
sizeof(
void *);
181 allocations_id[mynumallocs] = allocId;
182 allocations_bytes[mynumallocs] =
size;
187 ret = (
void *)(real);
190 printf(
"allocation %d at address %x, from %s,line %d, size %d (total allocated = %d)\n", allocId, real, filename, line,
size, gTotalBytesAlignedAllocs);
193 int *ptr = (
int *)ret;
208 p.cptr -=
sizeof(
void *);
210 p.cptr -=
sizeof(
void *);
212 p.cptr -=
sizeof(
void *);
213 int allocId = *p.iptr;
217 for (
int i = 0; i < mynumallocs; i++)
219 if (allocations_id[i] == allocId)
221 allocations_id[i] = allocations_id[mynumallocs - 1];
222 allocations_bytes[i] = allocations_bytes[mynumallocs - 1];
229 gTotalBytesAlignedAllocs -=
size;
231 int diff = gNumAlignedAllocs - gNumAlignedFree;
232 printf(
"free %d at address %x, from %s,line %d, size %d (total remain = %d in %d non-freed allocations)\n", allocId, real, filename, line,
size, gTotalBytesAlignedAllocs, diff);
242 #else //BT_DEBUG_MEMORY_ALLOCATIONS
263 #endif //BT_DEBUG_MEMORY_ALLOCATIONS