UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MallocLeakDetectionProxy.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 MallocLeakDetectionProxy.h: Helper class to track memory allocations
5=============================================================================*/
6
7#pragma once
8
9#include "CoreTypes.h"
10#include "HAL/MemoryBase.h"
11#include "HAL/UnrealMemory.h"
12#include "Containers/Array.h"
13#include "Misc/Crc.h"
15#include "Containers/Set.h"
16#include "Containers/Map.h"
17#include "Misc/ScopeLock.h"
18#include "HAL/ThreadSafeBool.h"
20
21#if MALLOC_LEAKDETECTION
22
28{
29private:
31 FMalloc* UsedMalloc;
32
33 /* Verifier object */
35
36public:
38
40
41 virtual void* Malloc(SIZE_T Size, uint32 Alignment) override
42 {
43 void* Result = UsedMalloc->Malloc(Size, Alignment);
44 Verify.Malloc(Result, Size);
45 return Result;
46 }
47
48 virtual void* Realloc(void* OldPtr, SIZE_T NewSize, uint32 Alignment) override
49 {
50 SIZE_T OldSize(0);
51 GetAllocationSize(OldPtr, OldSize);
52 void* NewPtr = UsedMalloc->Realloc(OldPtr, NewSize, Alignment);
53 Verify.Realloc(OldPtr, OldSize, NewPtr, NewSize);
54 return NewPtr;
55 }
56
57 virtual void Free(void* Ptr) override
58 {
59 if (Ptr)
60 {
61 Verify.Free(Ptr);
62 UsedMalloc->Free(Ptr);
63 }
64 }
65
66 virtual void InitializeStatsMetadata() override
67 {
68 UsedMalloc->InitializeStatsMetadata();
69 }
70
71 virtual void GetAllocatorStats(FGenericMemoryStats& OutStats) override
72 {
73 UsedMalloc->GetAllocatorStats(OutStats);
74 }
75
76 virtual void DumpAllocatorStats(FOutputDevice& Ar) override
77 {
78 //Verify.DumpOpenCallstacks(1024 * 1024);
79 UsedMalloc->DumpAllocatorStats(Ar);
80 }
81
82 virtual bool IsInternallyThreadSafe() const override
83 {
84 return UsedMalloc->IsInternallyThreadSafe();
85 }
86
87 virtual bool ValidateHeap() override
88 {
89 return UsedMalloc->ValidateHeap();
90 }
91
92 virtual bool Exec(UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar) override
93 {
94 return UsedMalloc->Exec(InWorld, Cmd, Ar);
95 }
96
97 virtual bool GetAllocationSize(void* Original, SIZE_T& OutSize) override
98 {
99 return UsedMalloc->GetAllocationSize(Original, OutSize);
100 }
101
102 virtual SIZE_T QuantizeSize(SIZE_T Count, uint32 Alignment) override
103 {
104 return UsedMalloc->QuantizeSize(Count, Alignment);
105 }
106
107 virtual void Trim(bool bTrimThreadCaches) override
108 {
109 return UsedMalloc->Trim(bTrimThreadCaches);
110 }
111 virtual void SetupTLSCachesOnCurrentThread() override
112 {
113 return UsedMalloc->SetupTLSCachesOnCurrentThread();
114 }
115
116 virtual void MarkTLSCachesAsUsedOnCurrentThread() override
117 {
119 }
120
121 virtual void MarkTLSCachesAsUnusedOnCurrentThread() override
122 {
124 }
125
126 virtual void ClearAndDisableTLSCachesOnCurrentThread() override
127 {
128 return UsedMalloc->ClearAndDisableTLSCachesOnCurrentThread();
129 }
130
131 virtual const TCHAR* GetDescriptiveName() override
132 {
133 return UsedMalloc->GetDescriptiveName();
134 }
135
136 virtual void OnMallocInitialized() override
137 {
138 UsedMalloc->OnMallocInitialized();
139 }
140};
141
142#endif // MALLOC_LEAKDETECTIONMALLOC_LEAKDETECTION
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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint32 Size
Definition VulkanMemory.cpp:4034
uint32_t uint32
Definition binka_ue_file_header.h:6
virtual CORE_API bool Exec(UWorld *InWorld, const TCHAR *Cmd, FOutputDevice &Ar)
Definition Exec.cpp:30
Definition MemoryBase.h:99
virtual const TCHAR * GetDescriptiveName()
Definition MemoryBase.h:248
virtual void Free(void *Original)=0
virtual void OnMallocInitialized()
Definition MemoryBase.h:256
virtual bool GetAllocationSize(void *Original, SIZE_T &SizeOut)
Definition MemoryBase.h:158
virtual void * Malloc(SIZE_T Count, uint32 Alignment=DEFAULT_ALIGNMENT)=0
virtual bool ValidateHeap()
Definition MemoryBase.h:238
virtual void SetupTLSCachesOnCurrentThread()
Definition MemoryBase.h:173
virtual bool IsInternallyThreadSafe() const
Definition MemoryBase.h:230
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 void * Realloc(void *Original, SIZE_T Count, uint32 Alignment=DEFAULT_ALIGNMENT)=0
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 World.h:918
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426
UE_STRING_CLASS Result(Forward< LhsType >(Lhs), RhsLen)
Definition String.cpp.inl:732
@ Exec
This function is executable from the command line.
Definition ObjectMacros.h:962
Definition MemoryMisc.h:21