UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GenericPlatformMallocCrash.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
7#include "HAL/MemoryBase.h"
8
10struct FPoolDesc;
11
14{
19
20#if PLATFORM_32BITS
22 uint8 Padding[4];
23#endif
24
26 Size(0),
27 Ptr(0)
28 {}
29
30 FPtrInfo( void* NewPtr ):
31 Size(0),
33 {}
34};
35
36struct FMallocCrashPool;
37struct FPoolDesc;
38
44{
45 friend struct FPoolDesc;
46 friend struct FMallocCrashPool;
47
48 enum
49 {
50 LARGE_MEMORYPOOL_SIZE = 2 * 1024 * 1024,
52
55
56 MEM_TAG = 0xfe,
58 };
59
60public:
63
66
78 void SetAsGMalloc();
79
80 static bool IsActive();
81
82 // FMalloc interface.
83 virtual void* Malloc( SIZE_T Size, uint32 Alignment ) override;
84
85 virtual void* Realloc( void* Ptr, SIZE_T NewSize, uint32 Alignment ) override;
86
87 virtual void Free( void* /*Ptr*/ ) override;
88
89 virtual bool GetAllocationSize( void *Original, SIZE_T &SizeOut ) override;
90
91 virtual bool IsInternallyThreadSafe() const override
92 {
93 return true;
94 }
95
96 virtual bool ValidateHeap() override
97 {
98 // Nothing to do here.
99 return true;
100 }
101
102 virtual const TCHAR * GetDescriptiveName() override
103 {
104 return TEXT( "MallocCrash" );
105 }
106
108
109protected:
111 bool CheckThreadForAllocation() const;
112 bool CheckThreadForFree() const;
113
114 bool IsPtrInLargePool(void* Ptr) const;
115 bool IsPtrInSmallPool(void* Ptr) const;
116
117 const FPoolDesc& GetPoolDesc( uint32 Index ) const;
120
122
123 // Choose a pool to make a new allocation from of the given size - may use a larger pool than necessary if small pools are exhausted.
124 FMallocCrashPool* ChoosePoolForSize( uint32 AllocationSize ) const;
125 // Find the pool that an allocation was made from if any.
126 FMallocCrashPool* FindPoolForAlloc(void* Ptr) const;
127 uint8* AllocateFromBookkeeping(uint32 AllocationSize);
128 uint8* AllocateFromSmallPool( uint32 AllocationSize );
129
131
135 static uint32 SafePageSize();
136
137protected:
140
143
146
149
152
156
159
163
166};
167
168
169
170
171
173{
176
179
180 void SetAsGMalloc();
181
182 static bool IsActive();
183
184 virtual void* Malloc(SIZE_T Size, uint32 Alignment) override;
185
186 virtual void* Realloc(void* Ptr, SIZE_T NewSize, uint32 Alignment) override;
187
188 virtual void Free(void* /*Ptr*/) override;
189
190 virtual const TCHAR * GetDescriptiveName() override
191 {
192 return TEXT("FGenericStackBasedMallocCrash");
193 }
194
195private:
196 enum
197 {
198 MEMORYPOOL_SIZE = 256 * 1024
199 };
200
201 uint8* CurrentFreeMemPtr;
202 uint8* FreeMemoryEndPtr;
203};
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MemoryBase.h:99
U16 Index
Definition radfft.cpp:71
Definition GenericPlatformMallocCrash.h:44
FMalloc * PreviousMalloc
Definition GenericPlatformMallocCrash.h:165
static CORE_API FGenericPlatformMallocCrash & Get(FMalloc *MainMalloc=nullptr)
Definition GenericPlatformMallocCrash.cpp:305
uint32 CalculateSmallPoolTotalSize() const
Definition GenericPlatformMallocCrash.cpp:546
virtual bool ValidateHeap() override
Definition GenericPlatformMallocCrash.h:96
uint32 SmallMemoryPoolSize
Definition GenericPlatformMallocCrash.h:155
uint32 CalculateBookkeepingPoolTotalSize() const
Definition GenericPlatformMallocCrash.cpp:565
@ MAX_NUM_ALLOCS_IN_POOL
Definition GenericPlatformMallocCrash.h:54
@ MEM_WIPETAG
Definition GenericPlatformMallocCrash.h:57
@ REQUIRED_ALIGNMENT
Definition GenericPlatformMallocCrash.h:51
@ LARGE_MEMORYPOOL_SIZE
Definition GenericPlatformMallocCrash.h:50
@ NUM_POOLS
Definition GenericPlatformMallocCrash.h:53
@ MEM_TAG
Definition GenericPlatformMallocCrash.h:56
bool CheckThreadForAllocation() const
Definition GenericPlatformMallocCrash.cpp:483
CORE_API void PrintPoolsUsage()
Definition GenericPlatformMallocCrash.cpp:462
const FPoolDesc & GetPoolDesc(uint32 Index) const
Definition GenericPlatformMallocCrash.cpp:93
virtual const TCHAR * GetDescriptiveName() override
Definition GenericPlatformMallocCrash.h:102
int32 CrashedThreadId
Definition GenericPlatformMallocCrash.h:142
static bool IsActive()
Definition GenericPlatformMallocCrash.cpp:323
void SetAsGMalloc()
Definition GenericPlatformMallocCrash.cpp:311
virtual bool IsInternallyThreadSafe() const override
Definition GenericPlatformMallocCrash.h:91
uint8 * SmallMemoryPool
Definition GenericPlatformMallocCrash.h:151
static uint32 SafePageSize()
Definition GenericPlatformMallocCrash.cpp:664
void InitializeSmallPools()
Definition GenericPlatformMallocCrash.cpp:583
uint32 LargeMemoryPoolOffset
Definition GenericPlatformMallocCrash.h:148
virtual bool GetAllocationSize(void *Original, SIZE_T &SizeOut) override
Definition GenericPlatformMallocCrash.cpp:540
virtual void * Realloc(void *Ptr, SIZE_T NewSize, uint32 Alignment) override
Definition GenericPlatformMallocCrash.cpp:374
uint32 BookkeepingPoolOffset
Definition GenericPlatformMallocCrash.h:161
bool IsPtrInLargePool(void *Ptr) const
Definition GenericPlatformMallocCrash.cpp:528
uint8 * AllocateFromSmallPool(uint32 AllocationSize)
Definition GenericPlatformMallocCrash.cpp:622
bool CheckThreadForFree() const
Definition GenericPlatformMallocCrash.cpp:505
virtual ~FGenericPlatformMallocCrash()
Definition GenericPlatformMallocCrash.cpp:296
uint32 SmallMemoryPoolOffset
Definition GenericPlatformMallocCrash.h:154
uint8 * AllocateFromBookkeeping(uint32 AllocationSize)
Definition GenericPlatformMallocCrash.cpp:635
FMallocCrashPool * FindPoolForAlloc(void *Ptr) const
Definition GenericPlatformMallocCrash.cpp:615
uint8 * BookkeepingPool
Definition GenericPlatformMallocCrash.h:158
uint8 * LargeMemoryPool
Definition GenericPlatformMallocCrash.h:145
bool IsPtrInSmallPool(void *Ptr) const
Definition GenericPlatformMallocCrash.cpp:534
FMallocCrashPool * ChoosePoolForSize(uint32 AllocationSize) const
Definition GenericPlatformMallocCrash.cpp:593
uint32 BookkeepingPoolSize
Definition GenericPlatformMallocCrash.h:162
FCriticalSection InternalLock
Definition GenericPlatformMallocCrash.h:139
virtual void * Malloc(SIZE_T Size, uint32 Alignment) override
Definition GenericPlatformMallocCrash.cpp:328
Definition GenericPlatformMallocCrash.h:173
virtual const TCHAR * GetDescriptiveName() override
Definition GenericPlatformMallocCrash.h:190
virtual ~FGenericStackBasedMallocCrash()
Definition GenericPlatformMallocCrash.cpp:686
virtual void * Malloc(SIZE_T Size, uint32 Alignment) override
Definition GenericPlatformMallocCrash.cpp:711
static bool IsActive()
Definition GenericPlatformMallocCrash.cpp:706
void SetAsGMalloc()
Definition GenericPlatformMallocCrash.cpp:696
static CORE_API FGenericStackBasedMallocCrash & Get(FMalloc *MainMalloc=nullptr)
Definition GenericPlatformMallocCrash.cpp:690
virtual void * Realloc(void *Ptr, SIZE_T NewSize, uint32 Alignment) override
Definition GenericPlatformMallocCrash.cpp:730
Definition GenericPlatformMallocCrash.cpp:99
Definition GenericPlatformMallocCrash.cpp:38
Definition GenericPlatformMallocCrash.h:14
FPtrInfo(void *NewPtr)
Definition GenericPlatformMallocCrash.h:30
uint64 Size
Definition GenericPlatformMallocCrash.h:16
uint8 * Ptr
Definition GenericPlatformMallocCrash.h:18
FPtrInfo()
Definition GenericPlatformMallocCrash.h:25