mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-14 02:33:53 +00:00
Grow BumpPtrAllocator's slab size dynamically if we allocated many slabs. This
reduces the amount of malloc calls and may reduce memory overhead. Some numbers: ASTContext stats, clang -cc1 -disable-free -fsyntax-only Cocoa_h.m without dynamic growth | with dynamic growth Number of memory regions: 3158 | Number of memory regions: 432 Bytes used: 12333185 | Bytes used: 12333185 Bytes allocated: 12935168 | Bytes allocated: 12800000 Bytes wasted: 601983 (includes alignment, etc) | Bytes wasted: 466815 (includes alignment, etc) ASTContext stats, clang -cc1 -disable-free -fsyntax-only on clang's ASTReader.cpp without dynamic growth | with dynamic growth Number of memory regions: 10987 | Number of memory regions: 551 Bytes used: 42910356 | Bytes used: 42910356 Bytes allocated: 45002752 | Bytes allocated: 44711936 Bytes wasted: 2092396 (includes alignment, etc) | Bytes wasted: 1801580 (includes alignment, etc) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115151 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2f24c4ece0
commit
82d96cccbc
@ -44,6 +44,12 @@ char *BumpPtrAllocator::AlignPtr(char *Ptr, size_t Alignment) {
|
||||
/// StartNewSlab - Allocate a new slab and move the bump pointers over into
|
||||
/// the new slab. Modifies CurPtr and End.
|
||||
void BumpPtrAllocator::StartNewSlab() {
|
||||
// If we allocated a big number of slabs already it's likely that we're going
|
||||
// to allocate more. Increase slab size to reduce mallocs and possibly memory
|
||||
// overhead. The factors are chosen conservatively to avoid overallocation.
|
||||
if (BytesAllocated >= SlabSize * 128)
|
||||
SlabSize *= 2;
|
||||
|
||||
MemSlab *NewSlab = Allocator.Allocate(SlabSize);
|
||||
NewSlab->NextPtr = CurSlab;
|
||||
CurSlab = NewSlab;
|
||||
|
Loading…
x
Reference in New Issue
Block a user