nlib
CentralHeap.h
Go to the documentation of this file.
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_HEAP_CENTRALHEAP_H_
4 #define INCLUDE_NN_NLIB_HEAP_CENTRALHEAP_H_
5 
6 #include "nn/nlib/heap/NMalloc.h"
7 
8 #if defined(_MSC_VER) && defined(nx_heap_EXPORTS)
9 #undef NLIB_VIS_PUBLIC
10 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
11 #endif
12 
13 NLIB_NAMESPACE_BEGIN
14 namespace heap {
15 
16 class CachedHeap;
17 class TlsHeapCentral;
19  public:
20  typedef void (*DestructorHandler)(void* start, void* end);
21 
22  CentralHeap() NLIB_NOEXCEPT : central_(NULL),
23  use_virtual_memory_(false),
24  heap_option_(0),
25  start_(NULL),
26  end_(NULL) {}
27  ~CentralHeap() NLIB_NOEXCEPT { this->Finalize(); }
28  errno_t Init(void* start, size_t size, uint32_t heap_option) NLIB_NOEXCEPT;
29  void Finalize() NLIB_NOEXCEPT;
30  NLIB_ALWAYS_INLINE void* Alloc(size_t n) NLIB_NOEXCEPT { return this->Alloc(n, 8); }
31  void* Alloc(size_t n, size_t algn) NLIB_NOEXCEPT;
32  errno_t Free(void* p) NLIB_NOEXCEPT;
33  errno_t FreeWithSize(void* p, size_t size) NLIB_NOEXCEPT;
34  size_t GetAllocSize(const void* p) NLIB_NOEXCEPT;
35  errno_t Realloc(void* ptr, size_t size, void** p) NLIB_NOEXCEPT;
36 
37  bool MakeCache(CachedHeap* ptr) NLIB_NOEXCEPT;
38  errno_t WalkAllocatedPtrs(nmalloc_heapwalk_callback func, void* user_ptr) NLIB_NOEXCEPT;
39  errno_t QueryV(int query, va_list ap) NLIB_NOEXCEPT;
40  errno_t Query(int query, ...) NLIB_NOEXCEPT;
41  static const size_t kPageSize;
42 
43  private:
44  TlsHeapCentral* central_;
45  bool use_virtual_memory_;
46  uint32_t heap_option_;
47  uint8_t* start_;
48  uint8_t* end_;
50 };
51 
52 } // namespace heap
53 NLIB_NAMESPACE_END
54 
55 #if defined(_MSC_VER) && defined(nx_heap_EXPORTS)
56 #undef NLIB_VIS_PUBLIC
57 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
58 #endif
59 
60 #endif // INCLUDE_NN_NLIB_HEAP_CENTRALHEAP_H_
int(* nmalloc_heapwalk_callback)(void *allocated_ptr, size_t size, void *user_ptr)
User-defined callback function that is called from nmalloc_walk_allocated_ptrs.
Definition: NMalloc.h:86
#define NLIB_ALWAYS_INLINE
Indicates that the compiler is forced to perform inline expansion of functions.
Definition: Platform_unix.h:69
CentralHeap() noexcept
Instantiates the object with default parameters (default constructor).
Definition: CentralHeap.h:22
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
Prohibits use of the copy constructor and assignment operator for the class specified by TypeName...
Definition: Config.h:145
File that defines functions including nmalloc and nfree.
~CentralHeap() noexcept
Destructor.
Definition: CentralHeap.h:27
static const size_t kPageSize
Page size of the heap (not related to the operating system page size).
Definition: CentralHeap.h:41
Central heap class whose use is paired with CachedHeap. It is used to implement nmalloc.
Definition: CentralHeap.h:18
#define NLIB_VIS_PUBLIC
Symbols for functions and classes are made available outside of the library.
Definition: Platform_unix.h:61
void * Alloc(size_t n) noexcept
Allocates a memory block.
Definition: CentralHeap.h:30
#define NLIB_NOEXCEPT
Defines noexcept geared to the environment, or the equivalent.
Definition: Config.h:86
Thread-specific cache class whose use is paired with CentralHeap.
Definition: CachedHeap.h:19
#define NLIB_FINAL
Defines final if it is available for use. If not, holds an empty string.
Definition: Config.h:211
int errno_t
Indicates with an int-type typedef that a POSIX error value is returned as the return value...
Definition: NMalloc.h:24