23 for (
auto n = next; n; n = next)
26 if (n->base != curPtr)
break;
35 int alignM = (1 << align) - 1;
36 size = (size + alignM) &~ alignM;
41 u32 begWaste = (
u32)addr & alignM;
43 u32 bSize = b->size - begWaste;
44 if (bSize < size)
continue;
59 auto nAddr = addr + size;
60 auto nSize = bSize - size;
67 else chunk.
size += nSize;
79 auto cSize = chunk.
size;
83 for (
auto b =
first; !done && b; b = b->
next)
88 if ((cAddr + cSize) == addr)
100 }
else if ((b->base + b->size) == cAddr)
void InsertAfter(MemBlock *b, MemBlock *n)
void CoalesceRight(MemBlock *b)
void Deallocate(const MemChunk &chunk)
void InsertBefore(MemBlock *b, MemBlock *p)
void DelBlock(MemBlock *b)
void AddBlock(MemBlock *blk)
bool Allocate(MemChunk &chunk, u32 size, int align)
static MemBlock * Create(u8 *base, u32 size)