2
3
4
5
9#include "Core/Library/MemoryLibrary.h"
18
19
22 const size_t alignSize = AlignUp(size);
23 size_t k = alignSize >> PAGE_SHIFT;
25 scl::
span* s = PageCache::Get()->NewSpan(k);
27 s->m_BlockSize = alignSize;
29 void* ptr =
reinterpret_cast<
void*>(s->m_PageId << PAGE_SHIFT);
34
35
38 return ThreadCacheThreadWapper::GetInst()->Allocate(size);
54 const size_t size = s->m_BlockSize;
57
58
65
66
69 ThreadCacheThreadWapper::GetInst()->Deallocate(ptr, size);
75 return *(
static_cast<
void**>(obj));
80 if (size <=
static_cast<size_t>( 128))
return MemoryLibrary::align_up<size_t>(size, 8);
81 else if (size <=
static_cast<size_t>(1 * 1024))
return MemoryLibrary::align_up<size_t>(size, 16);
82 else if (size <=
static_cast<size_t>(8 * 1024))
return MemoryLibrary::align_up<size_t>(size, 128);
83 else if (size <=
static_cast<size_t>(64 * 1024))
return MemoryLibrary::align_up<size_t>(size, 1024);
84 else if (size <=
static_cast<size_t>(256 * 1024))
return MemoryLibrary::align_up<size_t>(size, 8 * 1024);
85 else return MemoryLibrary::align_up<size_t>(size, 1 << PAGE_SHIFT);
90 auto _index = [&](size_t bytes, size_t align_shift) -> size_t
92 return ((bytes + (1 << align_shift) - 1) >> align_shift) - 1;
95 static constexpr int group_array[4] = { 16, 56, 56, 56 };
99 return _index(size, 3);
101 else if (size <= 1024)
103 return _index(size - 128, 4) +
106 else if (size <=
static_cast<size_t>(8 * 1024))
108 return _index(size - 1024, 7) +
112 else if (size <=
static_cast<size_t>(64 * 1024))
114 return _index(size -
static_cast<size_t>(8 * 1024), 10) +
119 else if (size <=
static_cast<size_t>(256 * 1024))
121 return _index(size -
static_cast<size_t>(64 * 1024), 13) +
136 static constexpr int group_array[4] = { 16, 56, 56, 56 };
141 return 8 * (index + 1);
145 else if(index < 16 + 56)
147 return 16 * (index + 1 - group_array[0]) + 128;
151 else if (index < 16 + 56 + 56)
153 return 128 * (index + 1 - group_array[0] - group_array[1]) + 1024;
157 else if (index < 16 + 56 + 56 + 56)
159 return 1024 * (index + 1 - group_array[0] - group_array[1] - group_array[2]) + 8 * 1024;
163 else if (index < 16 + 56 + 56 + 56 + 24)
165 return 8 * 1024 * (index + 1 - group_array[0] - group_array[1] - group_array[2] - group_array[3]) + 64 * 1024;
170 SPICES_CORE_ERROR(
"Access invalid free_lits index")
180
181
182 size_t num = MAX_BYTES / size;
183 num = std::max(std::min(
static_cast<size_t>(512), num),
static_cast<size_t>(2));
191
192
193 const size_t num = GetNBlocksLimit(size);
196
197
198 size_t npage = num * size;
199 npage >>= PAGE_SHIFT;
200 npage = std::max(npage,
static_cast<size_t>(1));
static void Free(void *ptr)
Free memory entry point.
static void *& PointerSpace(void *obj)
Get object first 4/8 bytes as a pointer.
scl::span * MapObjectToSpan(void *obj) const
Find span by memory pointer.
static PageCache * Get()
Get this single instance.
void ReleaseSpanToPageCache(scl::span *s)
Release span from cc to pc,.
Page memory cache. Third level of memory allocator.
bool m_IsUse
True if in use.
Used for manage multiple page memory.