| //===--- Allocator.h - Simple memory allocation abstraction -----*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file was developed by Chris Lattner and is distributed under |
| // the University of Illinois Open Source License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines the MallocAllocator and BumpPtrAllocator interfaces. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_SUPPORT_ALLOCATOR_H |
| #define LLVM_SUPPORT_ALLOCATOR_H |
| |
| #include "llvm/Support/AlignOf.h" |
| #include <cstdlib> |
| |
| namespace llvm { |
| |
| class MallocAllocator { |
| public: |
| MallocAllocator() {} |
| ~MallocAllocator() {} |
| |
| void Reset() {} |
| void *Allocate(unsigned Size, unsigned Alignment) { return malloc(Size); } |
| |
| template <typename T> |
| void *Allocate() { return reinterpret_cast<T*>(malloc(sizeof(T))); } |
| |
| void Deallocate(void *Ptr) { free(Ptr); } |
| void PrintStats() const {} |
| }; |
| |
| /// BumpPtrAllocator - This allocator is useful for containers that need very |
| /// simple memory allocation strategies. In particular, this just keeps |
| /// allocating memory, and never deletes it until the entire block is dead. This |
| /// makes allocation speedy, but must only be used when the trade-off is ok. |
| class BumpPtrAllocator { |
| void *TheMemory; |
| public: |
| BumpPtrAllocator(); |
| ~BumpPtrAllocator(); |
| |
| void Reset(); |
| void *Allocate(unsigned Size, unsigned Alignment); |
| |
| template <typename T> |
| void *Allocate() { |
| return reinterpret_cast<T*>(Allocate(sizeof(T),AlignOf<T>::Alignment)); |
| } |
| |
| |
| void Deallocate(void *Ptr) {} |
| void PrintStats() const; |
| }; |
| |
| } // end namespace clang |
| |
| #endif |