CommonLibSSE NG
Loading...
Searching...
No Matches
AbstractHeap.h
Go to the documentation of this file.
1#pragma once
2
3#include "RE/B/BSAtomic.h"
4#include "RE/I/IMemoryHeap.h"
5
6namespace RE
7{
8 class HeapBlock;
9 class HeapBlockFreeHead;
10
12 {
13 public:
14 inline static constexpr auto RTTI = RTTI_AbstractHeap;
15
16 ~AbstractHeap() override; // 00
17
18 // override (IMemoryHeap)
19 void GetMemoryStats(MemoryStats* a_stats) override; // 02
20 void* AllocateAlignImpl(std::size_t a_size, std::uint32_t a_alignment) override; // 04
21 void* TryAllocateImpl(std::size_t a_size, std::uint32_t a_alignment) override; // 06
22 const char* GetName() const override; // 07 - { return name; }
23 bool PointerInHeap(const void* a_pointer) const override; // 0A
24 void GetHeapStats(HeapStats* a_stats, bool a_fullBlockInfo) override; // 0C
25 bool ShouldTrySmallBlockPools(std::size_t a_size, MEM_CONTEXT a_context) override; // 0D - { return true; }
26 std::uint32_t GetPageSize() const override; // 0E - { return pageSize; }
27
28 // add
29 virtual void* DoHeapAllocation(std::size_t a_size, std::size_t a_initialSize) = 0; // 0F
30 virtual void DoHeapFree(void* a_ptr) = 0; // 10
31 virtual std::size_t CreateMorePages(void* a_memory, std::size_t a_currentSize, std::size_t a_requestedBytes); // 11 - { return 0; }
32 virtual std::size_t CleanExtraPages(void* a_memory, std::size_t a_currentSize, std::size_t a_freeBytes); // 12 - { return 0; }
33 virtual void DecommitPages(HeapBlock* a_block); // 13 - { return; }
34 virtual void CommitPages(HeapBlock*, std::size_t); // 14 - { return; }
35
36 // members
38 const char* name; // 030
39 std::size_t minFreeBlockSize; // 038
40 std::uint32_t pageSize; // 040
41 std::uint32_t pageSizeFlag; // 040
42 std::size_t memHeapSize; // 048
43 std::size_t initialSize; // 050
44 std::size_t currentSize; // 058
45 std::size_t wastedMemory; // 060
46 std::size_t memAllocated; // 068
47 std::size_t memAllocatedHigh; // 070
48 std::size_t blockMemAllocated; // 078
49 char* memHeap; // 080
50 std::int32_t numBlocks; // 088
51 std::uint32_t pad08C; // 08C
54 std::int32_t numFreeBlocks; // 0A0
55 bool allowDecommits; // 0A4
56 bool supportsSwapping; // 0A5
57 std::uint16_t pad0A0; // 0A6
60 };
61 static_assert(sizeof(AbstractHeap) == 0x2A8);
62}
Definition AbstractHeap.h:12
const char * GetName() const override
bool supportsSwapping
Definition AbstractHeap.h:56
const char * name
Definition AbstractHeap.h:38
std::size_t blockMemAllocated
Definition AbstractHeap.h:48
~AbstractHeap() override
std::size_t memAllocatedHigh
Definition AbstractHeap.h:47
std::size_t minFreeBlockSize
Definition AbstractHeap.h:39
BSCriticalSection criticalSection
Definition AbstractHeap.h:37
std::uint32_t pad08C
Definition AbstractHeap.h:51
std::uint32_t pageSizeFlag
Definition AbstractHeap.h:41
HeapBlock * blockHead
Definition AbstractHeap.h:52
void * TryAllocateImpl(std::size_t a_size, std::uint32_t a_alignment) override
static constexpr auto RTTI
Definition AbstractHeap.h:14
bool PointerInHeap(const void *a_pointer) const override
virtual void DecommitPages(HeapBlock *a_block)
virtual void DoHeapFree(void *a_ptr)=0
HeapBlock * blockTail
Definition AbstractHeap.h:53
std::size_t initialSize
Definition AbstractHeap.h:43
std::int32_t numBlocks
Definition AbstractHeap.h:50
std::size_t memAllocated
Definition AbstractHeap.h:46
virtual std::size_t CleanExtraPages(void *a_memory, std::size_t a_currentSize, std::size_t a_freeBytes)
std::uint32_t pageSize
Definition AbstractHeap.h:40
std::int32_t numFreeBlocks
Definition AbstractHeap.h:54
virtual void * DoHeapAllocation(std::size_t a_size, std::size_t a_initialSize)=0
std::size_t memHeapSize
Definition AbstractHeap.h:42
bool allowDecommits
Definition AbstractHeap.h:55
virtual void CommitPages(HeapBlock *, std::size_t)
std::size_t currentSize
Definition AbstractHeap.h:44
std::size_t wastedMemory
Definition AbstractHeap.h:45
char * memHeap
Definition AbstractHeap.h:49
void * AllocateAlignImpl(std::size_t a_size, std::uint32_t a_alignment) override
HeapBlock * smallFreeLists[32]
Definition AbstractHeap.h:58
HeapBlockFreeHead * largeFreeTrees[32]
Definition AbstractHeap.h:59
virtual std::size_t CreateMorePages(void *a_memory, std::size_t a_currentSize, std::size_t a_requestedBytes)
std::uint16_t pad0A0
Definition AbstractHeap.h:57
void GetHeapStats(HeapStats *a_stats, bool a_fullBlockInfo) override
bool ShouldTrySmallBlockPools(std::size_t a_size, MEM_CONTEXT a_context) override
std::uint32_t GetPageSize() const override
void GetMemoryStats(MemoryStats *a_stats) override
Definition BSAtomic.h:6
Definition HeapBlockFreeHead.h:8
Definition HeapBlock.h:6
Definition IMemoryHeap.h:31
Definition AbsorbEffect.h:6
constexpr REL::VariantID RTTI_AbstractHeap(690286, 398141, 0x1f5f5c0)
Definition IMemoryHeap.h:10
Definition IMemoryStoreBase.h:6