void XMemAlloc_RegisterDeallocation( void *p, DWORD dwAllocAttributes ) { if ( !g_pMemAlloc ) { // core xallocs cannot be journaled until system is ready return; } AUTO_LOCK_FM( g_XMemAllocMutex ); int size = XMemSize( p, dwAllocAttributes ); MemAlloc_RegisterExternalDeallocation( XMem, p, size ); }
//----------------------------------------------------------------------------- // XMemAlloc // // XBox Memory Allocator Override //----------------------------------------------------------------------------- LPVOID WINAPI XMemAlloc( SIZE_T dwSize, DWORD dwAllocAttributes ) { LPVOID ptr; XALLOC_ATTRIBUTES *pAttribs = (XALLOC_ATTRIBUTES *)&dwAllocAttributes; bool bPhysical = ( pAttribs->dwMemoryType == XALLOC_MEMTYPE_PHYSICAL ); if ( !bPhysical && !pAttribs->dwHeapTracksAttributes && pAttribs->dwAllocatorId != eXALLOCAllocatorId_XUI ) { MEM_ALLOC_CREDIT(); switch ( pAttribs->dwAlignment ) { case XALLOC_ALIGNMENT_4: #if !defined(USE_LIGHT_MEM_DEBUG) && !defined(USE_MEM_DEBUG) ptr = MemAlloc_Alloc( dwSize ); #else ptr = MemAlloc_Alloc(dwSize, g_pszModule, 0); #endif break; case XALLOC_ALIGNMENT_8: ptr = MemAlloc_AllocAligned( dwSize, 8 ); break; case XALLOC_ALIGNMENT_DEFAULT: case XALLOC_ALIGNMENT_16: default: ptr = MemAlloc_AllocAligned( dwSize, 16 ); break; } if ( pAttribs->dwZeroInitialize != 0 ) { memset( ptr, 0, XMemSize( ptr, dwAllocAttributes ) ); } return ptr; } ptr = XMemAllocDefault( dwSize, dwAllocAttributes ); if ( ptr ) { XMemAlloc_RegisterAllocation( ptr, dwAllocAttributes ); } return ptr; }