#pragma once #include "mutex.h" struct Heap { Mutex mutex; O1HeapInstance* heap; Mutex physicalMutex; O1HeapInstance* physicalHeap; void Init(); void* Alloc(size_t size); void* AllocPhysical(size_t size, size_t alignment); void Free(void* ptr); size_t Size(void* ptr); template T* Alloc(Args&&... args) { T* obj = (T*)Alloc(sizeof(T)); new (obj) T(std::forward(args)...); return obj; } template T* AllocPhysical(Args&&... args) { T* obj = (T*)AllocPhysical(sizeof(T), alignof(T)); new (obj) T(std::forward(args)...); return obj; } }; extern Heap g_userHeap;