MCPcopy Create free account
hub / github.com/RavEngine/RavEngine / allocate

Method allocate

deps/physx/physx/samples/samplebase/SampleAllocator.cpp:183–260  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

181}
182
183void* PxSampleAllocator::allocate(size_t size, const char* typeName, const char* filename, int line)
184{
185 if(!size)
186 return NULL;
187
188#if PX_DEBUG || PX_PROFILE
189 Ps::MutexT<Ps::RawAllocator>::ScopedLock lock(mMutex);
190
191 // Allocate one debug block in front of each real allocation
192 const size_t neededSize = size + sizeof(DebugBlock);
193 void* ptr = platformAlignedAlloc(neededSize);
194
195 if (NULL != ptr)
196 {
197 // Fill debug block
198 DebugBlock* DB = (DebugBlock*)ptr;
199 DB->mCheckValue = DEBUG_IDENTIFIER;
200 DB->mSize = PxU32(size);
201 DB->mLine = line;
202 DB->mSlotIndex = INVALID_ID;
203 DB->mFilename = filename;
204 DB->mHandle = typeName ? typeName : "";
205
206 // Update global stats
207 mTotalNbAllocs++;
208 mNbAllocs++;
209 mNbAllocatedBytes += PxU32(size);
210 if(mNbAllocatedBytes>mHighWaterMark)
211 mHighWaterMark = mNbAllocatedBytes;
212
213 // Insert the allocated block in the debug memory block list
214 if(mMemBlockList)
215 {
216 if(mFirstFree!=INVALID_ID)
217 {
218 // Recycle old location
219 PxU32 NextFree = (PxU32)(size_t)(mMemBlockList[mFirstFree]);
220 if(NextFree!=INVALID_ID)
221 NextFree>>=1;
222
223 mMemBlockList[mFirstFree] = ptr;
224 DB->mSlotIndex = mFirstFree;
225
226 mFirstFree = NextFree;
227 }
228 else
229 {
230 if(mMemBlockUsed==mMemBlockListSize)
231 {
232 // Allocate a bigger block
233 void** tps = (void**)::malloc((mMemBlockListSize+MEMBLOCKSTART)*sizeof(void*));
234 // Copy already used part
235 memcpy(tps, mMemBlockList, mMemBlockListSize*sizeof(void*));
236 // Initialize remaining part
237 void* Next = tps + mMemBlockListSize;
238 memset(Next, 0, MEMBLOCKSTART*sizeof(void*));
239
240 // Free previous memory, setup new pointer

Callers

nothing calls this directly

Calls 3

memcpyFunction · 0.85
platformAlignedAllocFunction · 0.70
reportErrorMethod · 0.45

Tested by

no test coverage detected