MCPcopy Create free account
hub / github.com/TheForceEngine/TheForceEngine / allocFromHeader

Function allocFromHeader

TheForceEngine/TFE_Memory/memoryRegion.cpp:203–232  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

201 }
202
203 void* allocFromHeader(MemoryBlock* block, RegionAllocHeader* header, u32 size)
204 {
205 assert(header->free == 1);
206 if (header->size - size >= MIN_SPLIT_SIZE)
207 {
208 // Split.
209 u64 split0 = size;
210 u64 split1 = header->size - split0;
211 RegionAllocHeader* next = (RegionAllocHeader*)((u8*)header + split0);
212
213 // Cleanup the free list.
214 removeHeaderFromFreelist(block, header);
215 header->size = u32(split0);
216
217 // Create a new free block.
218 next->size = u32(split1);
219 next->free = 0;
220 block->count++;
221
222 // Add the new block to the free list.
223 insertBlockIntoFreelist(block, next);
224 }
225 else
226 {
227 // Consume the whole block.
228 removeHeaderFromFreelist(block, header);
229 }
230 block->sizeFree -= header->size;
231 return (u8*)header + sizeof(RegionAllocHeader);
232 }
233
234 void* region_alloc(MemoryRegion* region, u64 size)
235 {

Callers 1

region_allocFunction · 0.85

Calls 2

removeHeaderFromFreelistFunction · 0.85
insertBlockIntoFreelistFunction · 0.85

Tested by

no test coverage detected