proxygen
folly::ThreadCachedArena Class Reference

#include <ThreadCachedArena.h>

Classes

struct  ThreadLocalPtrTag
 

Public Member Functions

 ThreadCachedArena (size_t minBlockSize=SysArena::kDefaultMinBlockSize, size_t maxAlign=SysArena::kDefaultMaxAlign)
 
void * allocate (size_t size)
 
void deallocate (void *, size_t=0)
 
size_t totalSize () const
 

Private Member Functions

 ThreadCachedArena (const ThreadCachedArena &)=delete
 
 ThreadCachedArena (ThreadCachedArena &&)=delete
 
ThreadCachedArenaoperator= (const ThreadCachedArena &)=delete
 
ThreadCachedArenaoperator= (ThreadCachedArena &&)=delete
 
SysArenaallocateThreadLocalArena ()
 
void zombify (SysArena &&arena)
 

Private Attributes

const size_t minBlockSize_
 
const size_t maxAlign_
 
ThreadLocalPtr< SysArena, ThreadLocalPtrTagarena_
 
Synchronized< SysArenazombies_
 

Detailed Description

Thread-caching arena: allocate memory which gets freed when the arena gets destroyed.

The arena itself allocates memory using malloc() in blocks of at least minBlockSize bytes.

For speed, each thread gets its own Arena (see Arena.h); when threads exit, the Arena gets merged into a "zombie" Arena, which will be deallocated when the ThreadCachedArena object is destroyed.

Definition at line 39 of file ThreadCachedArena.h.

Constructor & Destructor Documentation

folly::ThreadCachedArena::ThreadCachedArena ( size_t  minBlockSize = SysArena::kDefaultMinBlockSize,
size_t  maxAlign = SysArena::kDefaultMaxAlign 
)
explicit

Definition at line 23 of file ThreadCachedArena.cpp.

Referenced by totalSize().

24  : minBlockSize_(minBlockSize), maxAlign_(maxAlign) {}
folly::ThreadCachedArena::ThreadCachedArena ( const ThreadCachedArena )
privatedelete
folly::ThreadCachedArena::ThreadCachedArena ( ThreadCachedArena &&  )
privatedelete

Member Function Documentation

void* folly::ThreadCachedArena::allocate ( size_t  size)
inline

Definition at line 45 of file ThreadCachedArena.h.

References folly::Arena< Alloc >::allocate(), allocateThreadLocalArena(), arena_, and UNLIKELY.

Referenced by TEST().

45  {
46  SysArena* arena = arena_.get();
47  if (UNLIKELY(!arena)) {
48  arena = allocateThreadLocalArena();
49  }
50 
51  return arena->allocate(size);
52  }
constexpr auto size(C const &c) -> decltype(c.size())
Definition: Access.h:45
#define UNLIKELY(x)
Definition: Likely.h:48
ThreadLocalPtr< SysArena, ThreadLocalPtrTag > arena_
SysArena * folly::ThreadCachedArena::allocateThreadLocalArena ( )
private

Definition at line 26 of file ThreadCachedArena.cpp.

References arena_, folly::Arena< SysAllocator< void > >::kNoSizeLimit, maxAlign_, minBlockSize_, mode, folly::gen::move, folly::pushmi::detail::t, folly::THIS_THREAD, folly::pushmi::__adl::tp, and zombify().

Referenced by allocate().

26  {
27  SysArena* arena =
29  auto disposer = [this](SysArena* t, TLPDestructionMode mode) {
30  std::unique_ptr<SysArena> tp(t); // ensure it gets deleted
32  zombify(std::move(*t));
33  }
34  };
35  arena_.reset(arena, disposer);
36  return arena;
37 }
static constexpr size_t kNoSizeLimit
Definition: Arena.h:154
void zombify(SysArena &&arena)
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
folly::Optional< PskKeyExchangeMode > mode
ThreadLocalPtr< SysArena, ThreadLocalPtrTag > arena_
void folly::ThreadCachedArena::deallocate ( void *  ,
size_t  = 0 
)
inline

Definition at line 54 of file ThreadCachedArena.h.

References totalSize().

54  {
55  // Deallocate? Never!
56  }
ThreadCachedArena& folly::ThreadCachedArena::operator= ( const ThreadCachedArena )
privatedelete
ThreadCachedArena& folly::ThreadCachedArena::operator= ( ThreadCachedArena &&  )
privatedelete
size_t folly::ThreadCachedArena::totalSize ( ) const

Definition at line 43 of file ThreadCachedArena.cpp.

References arena_, ThreadCachedArena(), and zombies_.

Referenced by deallocate(), and TEST().

43  {
44  size_t result = sizeof(ThreadCachedArena);
45  for (const auto& arena : arena_.accessAllThreads()) {
46  result += arena.totalSize();
47  }
48  result += zombies_->totalSize() - sizeof(SysArena);
49  return result;
50 }
ThreadCachedArena(size_t minBlockSize=SysArena::kDefaultMinBlockSize, size_t maxAlign=SysArena::kDefaultMaxAlign)
ThreadLocalPtr< SysArena, ThreadLocalPtrTag > arena_
Synchronized< SysArena > zombies_
void folly::ThreadCachedArena::zombify ( SysArena &&  arena)
private

Definition at line 39 of file ThreadCachedArena.cpp.

References folly::gen::move, and zombies_.

Referenced by allocateThreadLocalArena().

39  {
40  zombies_->merge(std::move(arena));
41 }
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
Synchronized< SysArena > zombies_

Member Data Documentation

ThreadLocalPtr<SysArena, ThreadLocalPtrTag> folly::ThreadCachedArena::arena_
private

Definition at line 78 of file ThreadCachedArena.h.

Referenced by allocate(), allocateThreadLocalArena(), and totalSize().

const size_t folly::ThreadCachedArena::maxAlign_
private

Definition at line 76 of file ThreadCachedArena.h.

Referenced by allocateThreadLocalArena().

const size_t folly::ThreadCachedArena::minBlockSize_
private

Definition at line 75 of file ThreadCachedArena.h.

Referenced by allocateThreadLocalArena().

Synchronized<SysArena> folly::ThreadCachedArena::zombies_
private

Definition at line 81 of file ThreadCachedArena.h.

Referenced by totalSize(), and zombify().


The documentation for this class was generated from the following files: