1 //===--- Allocator.cpp - Simple memory allocation abstraction -------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements the BumpPtrAllocator interface.
12 //===----------------------------------------------------------------------===//
14 #include "llvm/Support/Allocator.h"
15 #include "llvm/Support/Compiler.h"
16 #include "llvm/Support/DataTypes.h"
17 #include "llvm/Support/Memory.h"
18 #include "llvm/Support/Recycler.h"
19 #include "llvm/Support/raw_ostream.h"
24 SlabAllocator::~SlabAllocator() { }
26 MallocSlabAllocator::~MallocSlabAllocator() { }
28 MemSlab *MallocSlabAllocator::Allocate(size_t Size) {
29 MemSlab *Slab = (MemSlab*)Allocator.Allocate(Size, 0);
35 void MallocSlabAllocator::Deallocate(MemSlab *Slab) {
36 Allocator.Deallocate(Slab);
39 void BumpPtrAllocatorBase::PrintStats() const {
40 unsigned NumSlabs = 0;
41 size_t TotalMemory = 0;
42 for (MemSlab *Slab = CurSlab; Slab != 0; Slab = Slab->NextPtr) {
43 TotalMemory += Slab->Size;
47 errs() << "\nNumber of memory regions: " << NumSlabs << '\n'
48 << "Bytes used: " << BytesAllocated << '\n'
49 << "Bytes allocated: " << TotalMemory << '\n'
50 << "Bytes wasted: " << (TotalMemory - BytesAllocated)
51 << " (includes alignment, etc)\n";
54 size_t BumpPtrAllocatorBase::getTotalMemory() const {
55 size_t TotalMemory = 0;
56 for (MemSlab *Slab = CurSlab; Slab != 0; Slab = Slab->NextPtr) {
57 TotalMemory += Slab->Size;
62 void PrintRecyclerStats(size_t Size,
64 size_t FreeListSize) {
65 errs() << "Recycler element size: " << Size << '\n'
66 << "Recycler element alignment: " << Align << '\n'
67 << "Number of elements free for recycling: " << FreeListSize << '\n';