-block allocator now track allocated blocks and is able to free memory
-jobs data is now allocated in System struct -written memory cleanup (AddressSanitizer don't show any leak)
This commit is contained in:
parent
9824b587fb
commit
235bbb49f2
7 changed files with 214 additions and 41 deletions
|
|
@ -10,7 +10,15 @@ struct BlockAllocator//(uint block_size, uint blocks_in_allocation)
|
|||
private uint block_size;
|
||||
private uint blocks_in_allocation;
|
||||
|
||||
struct BlockPointers
|
||||
{
|
||||
void*[32] blocks;
|
||||
uint numberof = 0;
|
||||
BlockPointers* next_pointers = null;
|
||||
}
|
||||
|
||||
void* next_block = null;
|
||||
BlockPointers* pointers = null;
|
||||
|
||||
void* getBlock() nothrow @nogc
|
||||
{
|
||||
|
|
@ -31,6 +39,16 @@ struct BlockAllocator//(uint block_size, uint blocks_in_allocation)
|
|||
{
|
||||
next_block = cast(void*) AlignedMallocator.instance.alignedAllocate(
|
||||
block_size * blocks_in_allocation, block_size);
|
||||
|
||||
if(pointers is null)pointers = Mallocator.instance.make!BlockPointers;
|
||||
if(pointers.numberof >= 32)
|
||||
{
|
||||
BlockPointers* new_pointers = Mallocator.instance.make!BlockPointers;
|
||||
new_pointers.next_pointers = pointers;
|
||||
pointers = new_pointers;
|
||||
}
|
||||
pointers.blocks[pointers.numberof++] = next_block;
|
||||
|
||||
foreach (i; 0 .. blocks_in_allocation - 1)
|
||||
{
|
||||
void** pointer = cast(void**)(next_block + i * block_size);
|
||||
|
|
@ -40,4 +58,18 @@ struct BlockAllocator//(uint block_size, uint blocks_in_allocation)
|
|||
next_block + (blocks_in_allocation - 1) * block_size);
|
||||
*pointer = null;
|
||||
}
|
||||
|
||||
void freeMemory() nothrow @nogc
|
||||
{
|
||||
while(pointers)
|
||||
{
|
||||
foreach(i;0..pointers.numberof)
|
||||
{
|
||||
AlignedMallocator.instance.dispose(pointers.blocks[i]);
|
||||
}
|
||||
BlockPointers* next_pointers = pointers.next_pointers;
|
||||
Mallocator.instance.dispose(pointers);
|
||||
pointers = next_pointers;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue