SpiecsEngine
 
Loading...
Searching...
No Matches

◆ New()

template<typename T >
T * Spices::ObjectPool< T >::New ( )

Alloc a memory block to store T.

Returns
Returns T pointer.

Reused space.

Alloc memory if there is no enough space.

Alloc 128 KB / 8KB = 16pages memory.

Pop current memoryblock as T.

Call Construct function of T in place.

Definition at line 177 of file ObjectPool.h.

178 {
179 T* obj = nullptr;
180
184 if (m_FreeList)
185 {
187 obj = static_cast<T*>(m_FreeList);
188 m_FreeList = next;
189 m_SpareBytes -= sizeof(T);
190 }
191 else
192 {
196 if (m_SpareBytes < sizeof(T))
197 {
199
203 void* memoryBlock = SystemAlloc(m_ExpandBytes >> 13);
204 if (!memoryBlock)
205 {
206 SPICES_CORE_ERROR("Memory alloc failed")
207
208 return nullptr;
209 }
210
211 m_pointer = static_cast<char*>(memoryBlock);
212 m_Memories.push_back(memoryBlock);
213 }
214
218 obj = reinterpret_cast<T*>(m_pointer);
219
220 m_pointer += sizeof(T);
221 m_SpareBytes -= sizeof(T);
222 }
223
227 new(obj)T;
228
229 return obj;
230 }
static void *& PointerSpace(void *obj)
Get object first 4/8 bytes as a pointer.
void * m_FreeList
freelist.
Definition ObjectPool.h:128
scl::vector< void * > m_Memories
This objectPoll allocated memories.
Definition ObjectPool.h:123
size_t m_ExpandBytes
Expand bytes.
Definition ObjectPool.h:143
size_t m_SpareBytes
Spare bytes of this objectPool.
Definition ObjectPool.h:133
char * m_pointer
objectPool current memory pointer.
Definition ObjectPool.h:118
static void * SystemAlloc(size_t kpage)
Alloc memory from system.
Definition MemoryPool.h:107

References Spices::ObjectPool< T >::m_FreeList, Spices::ObjectPool< T >::m_pointer, and Spices::MemoryPool::PointerSpace().

Referenced by Spices::ObjectPool< T >::ThreadNew().