mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
Smarter Reset(). Instead of deallocating all memory regions and reallocate the
first region, just deallocate all but the last region in the list. llvm-svn: 41782
This commit is contained in:
parent
65df926ced
commit
e6c68e7668
@ -68,14 +68,25 @@ public:
|
||||
return NewRegion->Allocate(AllocSize, Alignment, RegPtr);
|
||||
}
|
||||
|
||||
/// Deallocate - Release all memory for this region to the system.
|
||||
///
|
||||
/// Deallocate - Recursively release all memory for this and its next regions
|
||||
/// to the system.
|
||||
void Deallocate() {
|
||||
MemRegion *next = Next;
|
||||
free(this);
|
||||
if (next)
|
||||
next->Deallocate();
|
||||
}
|
||||
|
||||
/// DeallocateAllButLast - Recursively release all memory for this and its
|
||||
/// next regions to the system stopping at the last region in the list.
|
||||
/// Returns the pointer to the last region.
|
||||
MemRegion *DeallocateAllButLast() {
|
||||
MemRegion *next = Next;
|
||||
if (!next)
|
||||
return this;
|
||||
free(this);
|
||||
return next->DeallocateAllButLast();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@ -93,9 +104,10 @@ BumpPtrAllocator::~BumpPtrAllocator() {
|
||||
}
|
||||
|
||||
void BumpPtrAllocator::Reset() {
|
||||
((MemRegion*)TheMemory)->Deallocate();
|
||||
TheMemory = malloc(4096);
|
||||
((MemRegion*)TheMemory)->Init(4096, 1, 0);
|
||||
MemRegion *MRP = (MemRegion*)TheMemory;
|
||||
MRP = MRP->DeallocateAllButLast();
|
||||
MRP->Init(4096, 1, 0);
|
||||
TheMemory = MRP;
|
||||
}
|
||||
|
||||
void *BumpPtrAllocator::Allocate(unsigned Size, unsigned Align) {
|
||||
|
Loading…
Reference in New Issue
Block a user