17 #ifndef INC_KY_Kernel_HeapPT_Root_H
18 #define INC_KY_Kernel_HeapPT_Root_H
24 namespace Kaim {
namespace HeapPT {
63 class SysAllocGranulator :
public SysAllocPaged
67 SysAllocGranulator(SysAllocPaged* sysAlloc);
69 void Init(SysAllocPaged* sysAlloc);
71 virtual void GetInfo(Info* i)
const;
72 virtual void* Alloc(UPInt size, UPInt alignment);
73 virtual bool ReallocInPlace(
void* oldPtr, UPInt oldSize, UPInt newSize, UPInt alignment);
74 virtual bool Free(
void* ptr, UPInt size, UPInt alignment);
76 virtual void* AllocSysDirect(UPInt size, UPInt alignment, UPInt* actualSize, UPInt* actualAlign);
77 virtual bool FreeSysDirect(
void* ptr, UPInt size, UPInt alignment);
79 virtual UPInt GetFootprint()
const;
80 virtual UPInt GetUsedSpace()
const;
82 virtual void VisitMem(MemVisitor* visitor)
const;
83 virtual void VisitSegments(SegVisitor* visitor,
unsigned catSeg,
unsigned catUnused)
const;
85 virtual UPInt GetBase()
const;
86 virtual UPInt GetSize()
const;
89 Granulator* pGranulator;
90 UPInt SysDirectThreshold;
91 UPInt MaxHeapGranularity;
94 UPInt SysDirectFootprint;
95 UPInt PrivateData[32];
100 class SysAllocWrapper :
public SysAllocPaged
103 SysAllocWrapper(SysAllocPaged* sysAlloc);
105 virtual void GetInfo(Info* i)
const;
106 virtual void* Alloc(UPInt size, UPInt align);
107 virtual bool Free(
void* ptr, UPInt size, UPInt align);
108 virtual bool ReallocInPlace(
void* oldPtr, UPInt oldSize, UPInt newSize, UPInt align);
110 virtual void* AllocSysDirect(UPInt size, UPInt alignment, UPInt* actualSize, UPInt* actualAlign);
111 virtual bool FreeSysDirect(
void* ptr, UPInt size, UPInt alignment);
113 virtual void VisitMem(MemVisitor*)
const;
114 virtual void VisitSegments(Heap::SegVisitor* visitor,
unsigned catSeg,
unsigned catUnused)
const;
116 virtual UPInt GetFootprint()
const;
117 virtual UPInt GetUsedSpace()
const;
119 void* AllocSysDirect(UPInt size);
120 void FreeSysDirect(
void* ptr, UPInt size);
123 SysAllocGranulator Allocator;
124 SysAllocPaged* pSrcAlloc;
125 SysAllocPaged* pSysAlloc;
126 UPInt SysGranularity;
135 HeapRoot(SysAllocPaged* sysAlloc);
138 void CreateArena(UPInt arena, SysAllocPaged* sysAlloc);
139 int DestroyArena(UPInt arena);
140 void DestroyAllArenas();
141 bool ArenaIsEmpty(UPInt arena);
142 SysAllocPaged* GetSysAlloc(UPInt arena);
144 Starter* GetStarter() {
return &AllocStarter; }
145 Bookkeeper* GetBookkeeper() {
return &AllocBookkeeper; }
147 MemoryHeapPT* CreateHeap(
const char* name,
148 MemoryHeapPT* parent,
149 const MemoryHeap::HeapDesc& desc);
151 void DestroyHeap(MemoryHeapPT* heap);
153 LockSafe* GetLock() {
return &RootLock; }
155 void VisitSegments(Heap::SegVisitor* visitor)
const;
157 void* AllocSysDirect(UPInt size);
158 void FreeSysDirect(
void* ptr, UPInt size);
160 void GetStats(MemoryHeap::RootStats* stats)
const;
162 #ifdef KY_MEMORY_ENABLE_DEBUG_INFO
163 Granulator* GetDebugAlloc() {
return &DebugAlloc; }
166 #ifdef KY_MEMORY_TRACE_ALL
167 void OnAlloc(
const MemoryHeap* heap, UPInt size, UPInt align,
unsigned sid,
const void* ptr);
168 void OnRealloc(
const MemoryHeap* heap,
const void* oldPtr, UPInt newSize,
const void* newPtr);
169 void OnFree(
const MemoryHeap* heap,
const void* ptr);
171 static MemoryHeap::HeapTracer* pTracer;
176 SysAllocWrapper AllocWrapper;
177 Starter AllocStarter;
178 Bookkeeper AllocBookkeeper;
179 #ifdef KY_MEMORY_ENABLE_DEBUG_INFO
180 Granulator DebugAlloc;
182 mutable LockSafe RootLock;
183 SysAllocPaged** pArenas;
187 extern HeapRoot* GlobalRoot;
Definition: gamekitcrowddispersion.h:20