19 #ifndef INC_KY_Kernel_SysAlloc_H
20 #define INC_KY_Kernel_SysAlloc_H
26 namespace Heap {
class MemVisitor;
class SegVisitor; }
40 virtual bool initHeapEngine(
const void* heapDesc) { KY_UNUSED(heapDesc);
return false; }
42 virtual void shutdownHeapEngine() { }
75 virtual void*
Alloc(UPInt size, UPInt align) = 0;
76 virtual void Free(
void* ptr, UPInt size, UPInt align) = 0;
77 virtual void*
Realloc(
void* oldPtr, UPInt oldSize, UPInt newSize, UPInt align) = 0;
81 virtual bool initHeapEngine(
const void* heapDesc);
82 virtual void shutdownHeapEngine();
147 UPInt SysDirectThreshold;
154 UPInt MaxHeapGranularity;
168 virtual void GetInfo(Info* i)
const = 0;
169 virtual void* Alloc(UPInt size, UPInt align) = 0;
170 virtual bool Free(
void* ptr, UPInt size, UPInt align) = 0;
176 virtual bool ReallocInPlace(
void* oldPtr, UPInt oldSize, UPInt newSize, UPInt align)
178 KY_UNUSED4(oldPtr, oldSize, newSize, align);
183 virtual void* AllocSysDirect(UPInt, UPInt, UPInt*, UPInt*) {
return 0; }
184 virtual bool FreeSysDirect(
void*, UPInt, UPInt) {
return false; }
186 virtual UPInt GetBase()
const {
return 0; }
187 virtual UPInt GetSize()
const {
return 0; }
189 virtual UPInt GetFootprint()
const {
return 0; }
190 virtual UPInt GetUsedSpace()
const {
return 0; }
191 virtual void VisitMem(Heap::MemVisitor*)
const {}
192 virtual void VisitSegments(Heap::SegVisitor*,
unsigned,
unsigned)
const {}
194 virtual ~SysAllocPaged() { }
199 virtual bool initHeapEngine(
const void* heapDesc);
200 virtual void shutdownHeapEngine();
208 namespace HeapPT {
class AllocLite; }
209 namespace Heap {
class MemVisitor; }
211 class SysAllocStatic :
public SysAllocPaged
214 enum { MaxSegments = 4 };
216 KY_EXPORT SysAllocStatic(
void* mem1=0, UPInt size1=0,
217 void* mem2=0, UPInt size2=0,
218 void* mem3=0, UPInt size3=0,
219 void* mem4=0, UPInt size4=0);
221 KY_EXPORT SysAllocStatic(UPInt minSize);
223 KY_EXPORT
void AddMemSegment(
void* mem, UPInt size);
225 virtual void GetInfo(Info* i)
const;
226 virtual void* Alloc(UPInt size, UPInt align);
227 virtual bool ReallocInPlace(
void* oldPtr, UPInt oldSize, UPInt newSize, UPInt align);
228 virtual bool Free(
void* ptr, UPInt size, UPInt align);
230 virtual void VisitMem(Heap::MemVisitor* visitor)
const;
232 virtual UPInt GetFootprint()
const;
233 virtual UPInt GetUsedSpace()
const;
235 virtual UPInt GetBase()
const;
236 virtual UPInt GetSize()
const;
241 HeapPT::AllocLite* pAllocator;
242 UPInt PrivateData[8];
243 UPInt Segments[MaxSegments][8];
259 template<
class A,
class B>
260 class SysAllocBase_SingletonSupport :
public B
262 struct SysAllocContainer
264 UPInt Data[(
sizeof(A) +
sizeof(UPInt)-1) /
sizeof(UPInt)];
266 SysAllocContainer() : Initialized(0) { }
269 SysAllocContainer* pContainer;
276 static B* InitSystemSingleton()
278 static SysAllocContainer Container;
279 KY_ASSERT(Container.Initialized ==
false);
283 SysAllocBase_SingletonSupport<A,B> *presult = ::new((
void*)Container.Data) A;
286 #if defined(KY_DEFINE_NEW)
287 #define new KY_DEFINE_NEW
290 presult->pContainer = &Container;
291 Container.Initialized =
true;
296 virtual void shutdownHeapEngine()
298 B::shutdownHeapEngine();
301 pContainer->Initialized =
false;
319 virtual UPInt GetPageSize()
const = 0;
326 virtual void* ReserveAddrSpace(UPInt size) = 0;
327 virtual bool ReleaseAddrSpace(
void* ptr, UPInt size) = 0;
336 virtual void* MapPages(
void* ptr, UPInt size) = 0;
337 virtual bool UnmapPages(
void* ptr, UPInt size) = 0;
339 virtual ~SysMemMapper() {}
A base class for an object that manages memory allocations and de-allocations.
Definition: SF_SysAlloc.h:33
The SysAlloc class specifies an interface for allocating and freeing memory.
Definition: SF_SysAlloc.h:70
Adds to the SysAlloc class support for restricting instantiation to a single object.
Definition: SF_SysAlloc.h:267
virtual void * Realloc(void *oldPtr, UPInt oldSize, UPInt newSize, UPInt align)=0
Re-allocates a buffer to a new size.
Definition: gamekitcrowddispersion.h:20
virtual void * Alloc(UPInt size, UPInt align)=0
Allocates a buffer of the specified size, with the specified alignment.
virtual void Free(void *ptr, UPInt size, UPInt align)=0
Frees the specified memory buffer.