UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MallocCallstackHandler.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "Containers/Map.h"
7#include "CoreTypes.h"
9#include "HAL/MemoryBase.h"
10#include "HAL/PlatformTLS.h"
11#include "Misc/Crc.h"
12
14
16{
17public:
19
23 CORE_API virtual void* Malloc(SIZE_T Count, uint32 Alignment = DEFAULT_ALIGNMENT) override;
24
28 CORE_API virtual void* Realloc(void* Original, SIZE_T Count, uint32 Alignment = DEFAULT_ALIGNMENT) override;
29
33 CORE_API virtual void Free(void* Original) override;
34
41 virtual SIZE_T QuantizeSize(SIZE_T Count, uint32 Alignment) override
42 {
43 return UsedMalloc->QuantizeSize(Count, Alignment);
44 }
45
53 virtual bool GetAllocationSize(void *Original, SIZE_T &SizeOut) override
54 {
56 }
57
61 virtual void Trim(bool bTrimThreadCaches) override
62 {
64 }
65
73
81
89
97
102 virtual void InitializeStatsMetadata() override
103 {
105 }
106
108 virtual void UpdateStats() override
109 {
111 }
112
118
120 virtual void DumpAllocatorStats(class FOutputDevice& Ar) override
121 {
123 }
124
129 virtual bool IsInternallyThreadSafe() const override
130 {
131 return true;
132 }
133
137 virtual bool ValidateHeap() override
138 {
139 return UsedMalloc->ValidateHeap();
140 }
141
147 virtual const TCHAR* GetDescriptiveName() override
148 {
150 }
151
152 virtual void OnMallocInitialized() override
153 {
155 }
156
157 virtual void OnPreFork() override
158 {
160 }
161
162 virtual void OnPostFork() override
163 {
165 }
166
167 static constexpr inline SIZE_T MaxCallStackDepth = 64;
168 static constexpr inline SIZE_T CallStackEntriesToSkipCount = 2;
169
175
178 {
181
187
188 friend bool operator==(const FCallStackMapKey& A, const FCallStackMapKey& B)
189 {
190 if (A.CRC != B.CRC)
191 {
192 return false;
193 }
194 for (int i = 0; i < MaxCallStackDepth; ++i)
195 {
196 uint64 APtr = A.CallStack[i];
197 uint64 BPtr = B.CallStack[i];
198 if (APtr != BPtr)
199 {
200 return false;
201 }
202 if (APtr == 0)
203 break;
204 }
205 return true;
206 }
207
209 {
210 return InKey.CRC;
211 }
212 };
213
214 virtual void Init();
215 void DumpStackTraceToLog(int32 StackIndex);
216
218
219protected:
225
226 inline void IncDisabled()
227 {
229 ++DisabledCount;
230 FPlatformTLS::SetTlsValue(DisabledTLS, (void*)DisabledCount);
231 }
232
233 inline void DecDisabled()
234 {
236 --DisabledCount;
237 FPlatformTLS::SetTlsValue(DisabledTLS, (void*)DisabledCount);
238 }
239 virtual bool IsDisabled()
240 {
242 }
243
244 CORE_API virtual void TrackRealloc(void* OldPtr, void* NewPtr, uint32 NewSize, uint32 OldSize, int32 CallStackIndex);
245 virtual void TrackMalloc(void* Ptr, uint32 Size, int32 CallStackIndex) = 0;
246 virtual void TrackFree(void* Ptr, uint32 OldSize, int32 CallStackIndex) = 0;
247
249
252
253 virtual int32 GetCallStackIndex();
254};
255
257
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
CORE_API FMallocCallstackHandler * GMallocCallstackHandler
Definition MallocCallstackHandler.cpp:16
@ DEFAULT_ALIGNMENT
Definition MemoryBase.h:24
uint32 Size
Definition VulkanMemory.cpp:4034
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MallocCallstackHandler.h:16
FMalloc * UsedMalloc
Definition MallocCallstackHandler.h:221
void IncDisabled()
Definition MallocCallstackHandler.h:226
static constexpr SIZE_T MaxCallStackDepth
Definition MallocCallstackHandler.h:167
virtual void InitializeStatsMetadata() override
Definition MallocCallstackHandler.h:102
bool Initialized
Definition MallocCallstackHandler.h:222
virtual void MarkTLSCachesAsUnusedOnCurrentThread()
Definition MallocCallstackHandler.h:85
virtual CORE_API void * Malloc(SIZE_T Count, uint32 Alignment=DEFAULT_ALIGNMENT) override
Definition MallocCallstackHandler.cpp:43
void DecDisabled()
Definition MallocCallstackHandler.h:233
virtual int32 GetCallStackIndex()
Definition MallocCallstackHandler.cpp:141
void DumpStackTraceToLog(int32 StackIndex)
Definition MallocCallstackHandler.cpp:185
virtual bool ValidateHeap() override
Definition MallocCallstackHandler.h:137
virtual bool GetAllocationSize(void *Original, SIZE_T &SizeOut) override
Definition MallocCallstackHandler.h:53
virtual void TrackFree(void *Ptr, uint32 OldSize, int32 CallStackIndex)=0
virtual CORE_API void * Realloc(void *Original, SIZE_T Count, uint32 Alignment=DEFAULT_ALIGNMENT) override
Definition MallocCallstackHandler.cpp:70
virtual void SetupTLSCachesOnCurrentThread() override
Definition MallocCallstackHandler.h:69
virtual void OnMallocInitialized() override
Definition MallocCallstackHandler.h:152
virtual void UpdateStats() override
Definition MallocCallstackHandler.h:108
FCriticalSection CriticalSection
Definition MallocCallstackHandler.h:223
virtual void GetAllocatorStats(FGenericMemoryStats &out_Stats) override
Definition MallocCallstackHandler.h:114
virtual void ClearAndDisableTLSCachesOnCurrentThread() override
Definition MallocCallstackHandler.h:93
uint32 DisabledTLS
Definition MallocCallstackHandler.h:224
virtual void OnPostFork() override
Definition MallocCallstackHandler.h:162
virtual void Init()
Definition MallocCallstackHandler.cpp:27
virtual void Trim(bool bTrimThreadCaches) override
Definition MallocCallstackHandler.h:61
virtual void DumpAllocatorStats(class FOutputDevice &Ar) override
Definition MallocCallstackHandler.h:120
virtual CORE_API void TrackRealloc(void *OldPtr, void *NewPtr, uint32 NewSize, uint32 OldSize, int32 CallStackIndex)
Definition MallocCallstackHandler.cpp:118
TMap< FCallStackMapKey, int32 > CallStackMapKeyToCallStackIndexMap
Definition MallocCallstackHandler.h:250
static constexpr SIZE_T CallStackEntriesToSkipCount
Definition MallocCallstackHandler.h:168
virtual bool IsInternallyThreadSafe() const override
Definition MallocCallstackHandler.h:129
virtual void OnPreFork() override
Definition MallocCallstackHandler.h:157
virtual bool IsDisabled()
Definition MallocCallstackHandler.h:239
virtual void TrackMalloc(void *Ptr, uint32 Size, int32 CallStackIndex)=0
virtual SIZE_T QuantizeSize(SIZE_T Count, uint32 Alignment) override
Definition MallocCallstackHandler.h:41
virtual const TCHAR * GetDescriptiveName() override
Definition MallocCallstackHandler.h:147
TArray< FCallStackInfo > CallStackInfoArray
Definition MallocCallstackHandler.h:251
virtual void MarkTLSCachesAsUsedOnCurrentThread() override
Definition MallocCallstackHandler.h:77
FRWLock RWLock
Definition MallocCallstackHandler.h:248
Definition MemoryBase.h:99
virtual const TCHAR * GetDescriptiveName()
Definition MemoryBase.h:248
virtual void OnMallocInitialized()
Definition MemoryBase.h:256
virtual void OnPreFork()
Definition MemoryBase.h:261
virtual bool GetAllocationSize(void *Original, SIZE_T &SizeOut)
Definition MemoryBase.h:158
virtual bool ValidateHeap()
Definition MemoryBase.h:238
virtual void SetupTLSCachesOnCurrentThread()
Definition MemoryBase.h:173
virtual void MarkTLSCachesAsUnusedOnCurrentThread()
Definition MemoryBase.h:187
virtual void DumpAllocatorStats(class FOutputDevice &Ar)
Definition MemoryBase.h:221
virtual CORE_API void GetAllocatorStats(FGenericMemoryStats &out_Stats)
Definition MemoryBase.cpp:85
virtual void MarkTLSCachesAsUsedOnCurrentThread()
Definition MemoryBase.h:180
virtual void Trim(bool bTrimThreadCaches)
Definition MemoryBase.h:166
virtual CORE_API void InitializeStatsMetadata()
Definition MemoryBase.cpp:61
virtual CORE_API void UpdateStats()
Definition MemoryBase.cpp:72
virtual void OnPostFork()
Definition MemoryBase.h:266
virtual void ClearAndDisableTLSCachesOnCurrentThread()
Definition MemoryBase.h:194
virtual SIZE_T QuantizeSize(SIZE_T Count, uint32 Alignment)
Definition MemoryBase.h:146
Definition OutputDevice.h:133
Definition MallocCallstackHandler.h:264
FScopeDisableMallocCallstackHandler()
Definition MallocCallstackHandler.h:267
~FScopeDisableMallocCallstackHandler()
Definition MallocCallstackHandler.h:272
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition CriticalSection.h:14
static UE_FORCEINLINE_HINT void * GetTlsValue(uint32 SlotIndex)
Definition AndroidPlatformTLS.h:57
static UE_FORCEINLINE_HINT void SetTlsValue(uint32 SlotIndex, void *Value)
Definition AndroidPlatformTLS.h:47
static UE_FORCEINLINE_HINT uint32 MemCrc32(const void *Data, int32 Length, uint32 CRC=0)
Definition Crc.h:31
Definition MemoryMisc.h:21
Definition MallocCallstackHandler.h:171
uint32 Count
Definition MallocCallstackHandler.h:172
uint64 FramePointers[MaxCallStackDepth]
Definition MallocCallstackHandler.h:173
Definition MallocCallstackHandler.h:178
friend bool operator==(const FCallStackMapKey &A, const FCallStackMapKey &B)
Definition MallocCallstackHandler.h:188
FCallStackMapKey(uint64 *InCallStack)
Definition MallocCallstackHandler.h:182
uint32 CRC
Definition MallocCallstackHandler.h:179
friend uint32 GetTypeHash(const FCallStackMapKey &InKey)
Definition MallocCallstackHandler.h:208
uint64 * CallStack
Definition MallocCallstackHandler.h:180