27#ifdef USE_SHARED_HEAP_MEMORY
39 inline size_t normalizeSize(
size_t size)
noexcept
41 return size == 0 ? 1 : size;
44 inline size_t normalizeAlignment(
size_t alignment)
noexcept
46 const size_t minAlignment =
alignof(
void*);
47 return alignment < minAlignment ? minAlignment : alignment;
50 inline void* allocRawNoThrow(
size_t size)
noexcept
52 return ::HeapAlloc(::GetProcessHeap(), 0, normalizeSize(size));
55 inline void* allocRaw(
size_t size)
59 if (
void* p = allocRawNoThrow(size))
62 std::new_handler handler = std::get_new_handler();
64 throw std::bad_alloc();
70 inline void freeRaw(
void* p)
noexcept
73 ::HeapFree(::GetProcessHeap(), 0, p);
76 inline void* allocAlignedNoThrow(
size_t size,
size_t alignment)
noexcept
78 size = normalizeSize(size);
79 alignment = normalizeAlignment(alignment);
81 const size_t extra = alignment - 1 +
sizeof(
void*);
83 void* base = ::HeapAlloc(::GetProcessHeap(), 0, size + extra);
87 const uintptr_t raw =
reinterpret_cast<uintptr_t
>(base) +
sizeof(
void*);
88 const uintptr_t aligned = (raw + alignment - 1) & ~(
static_cast<uintptr_t
>(alignment) - 1);
90 void* p =
reinterpret_cast<void*
>(aligned);
91 reinterpret_cast<void**
>(p)[-1] = base;
95 inline void* allocAligned(
size_t size,
size_t alignment)
99 if (
void* p = allocAlignedNoThrow(size, alignment))
102 std::new_handler handler = std::get_new_handler();
104 throw std::bad_alloc();
110 inline void freeAligned(
void* p)
noexcept
115 void* base =
reinterpret_cast<void**
>(p)[-1];
116 ::HeapFree(::GetProcessHeap(), 0, base);
121inline void*
operator new(
size_t size)
123 return Skylicht::Heap::allocRaw(size);
126inline void operator delete(
void* p)
noexcept
128 Skylicht::Heap::freeRaw(p);
131inline void*
operator new[](
size_t size)
133 return Skylicht::Heap::allocRaw(size);
136inline void operator delete[](
void* p)
noexcept
138 Skylicht::Heap::freeRaw(p);
141inline void*
operator new(
size_t size,
const std::nothrow_t&)
noexcept
143 return Skylicht::Heap::allocRawNoThrow(size);
146inline void operator delete(
void* p,
const std::nothrow_t&)
noexcept
148 Skylicht::Heap::freeRaw(p);
151inline void*
operator new[](
size_t size,
const std::nothrow_t&)
noexcept
153 return Skylicht::Heap::allocRawNoThrow(size);
156inline void operator delete[](
void* p,
const std::nothrow_t&)
noexcept
158 Skylicht::Heap::freeRaw(p);
161#if defined(__cpp_sized_deallocation) || defined(_MSC_VER)
162inline void operator delete(
void* p, size_t)
noexcept
164 Skylicht::Heap::freeRaw(p);
167inline void operator delete[](
void* p, size_t)
noexcept
169 Skylicht::Heap::freeRaw(p);
173#if defined(__cpp_aligned_new)
174inline void*
operator new(
size_t size, std::align_val_t alignment)
176 return Skylicht::Heap::allocAligned(size,
static_cast<size_t>(alignment));
179inline void operator delete(
void* p, std::align_val_t)
noexcept
181 Skylicht::Heap::freeAligned(p);
184inline void*
operator new[](
size_t size, std::align_val_t alignment)
186 return Skylicht::Heap::allocAligned(size,
static_cast<size_t>(alignment));
189inline void operator delete[](
void* p, std::align_val_t)
noexcept
191 Skylicht::Heap::freeAligned(p);
194inline void*
operator new(
size_t size, std::align_val_t alignment,
const std::nothrow_t&)
noexcept
196 return Skylicht::Heap::allocAlignedNoThrow(size,
static_cast<size_t>(alignment));
199inline void operator delete(
void* p, std::align_val_t,
const std::nothrow_t&)
noexcept
201 Skylicht::Heap::freeAligned(p);
204inline void*
operator new[](
size_t size, std::align_val_t alignment,
const std::nothrow_t&)
noexcept
206 return Skylicht::Heap::allocAlignedNoThrow(size,
static_cast<size_t>(alignment));
209inline void operator delete[](
void* p, std::align_val_t,
const std::nothrow_t&)
noexcept
211 Skylicht::Heap::freeAligned(p);
214#if defined(__cpp_sized_deallocation) || defined(_MSC_VER)
215inline void operator delete(
void* p, size_t, std::align_val_t)
noexcept
217 Skylicht::Heap::freeAligned(p);
220inline void operator delete[](
void* p, size_t, std::align_val_t)
noexcept
222 Skylicht::Heap::freeAligned(p);
Everything in the Skylicht Engine. You can start by looking at the topics.
Definition AudioDebugLog.h:29