nlib
CentralHeap.h
[詳解]
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)
nmalloc_walk_allocated_ptrs()から呼び出されるユーザー定義のコールバック関数です。 ...
Definition: NMalloc.h:86
#define NLIB_ALWAYS_INLINE
コンパイラに関数をインライン展開するように強く示します。
Definition: Platform_unix.h:69
CentralHeap() noexcept
デフォルトコンストラクタです。
Definition: CentralHeap.h:22
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
Definition: Config.h:145
nmalloc/nfree等が宣言されているファイルです。
~CentralHeap() noexcept
デストラクタです。
Definition: CentralHeap.h:27
static const size_t kPageSize
ヒープのページサイズです(OSのページサイズとの関連性はありません)。
Definition: CentralHeap.h:41
CachedHeapと対になって利用される中央ヒープクラスです。nmalloc()の実装に利用されています。 ...
Definition: CentralHeap.h:18
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:61
void * Alloc(size_t n) noexcept
メモリブロックを確保します。
Definition: CentralHeap.h:30
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Config.h:86
CentralHeapと対になって利用されるスレッド専用キャッシュクラスです。
Definition: CachedHeap.h:19
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
Definition: Config.h:211
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:24