47 void setup(
void* emptySpacesMemory, int32_t emptySpacesMemorySize, uint32_t regionBegin, uint32_t regionEnd,
48 CacheManager* cacheManager);
49 void* alloc(uint32_t requiredSize,
bool makeStealable,
void* thingNotToStealFrom);
50 size_t nallocx(
size_t size) {
return padSize(size); }
51 uint32_t shortenRight(
void* address, uint32_t newSize);
52 uint32_t shortenLeft(
void* address, uint32_t amountToShorten, uint32_t numBytesToMoveRightIfSuccessful = 0);
53 void extend(
void* address, uint32_t minAmountToExtend, uint32_t idealAmountToExtend,
54 uint32_t* getAmountExtendedLeft, uint32_t* getAmountExtendedRight,
void* thingNotToStealFrom);
55 uint32_t extendRightAsMuchAsEasilyPossible(
void* spaceAddress);
56 void dealloc(
void* address);
57 void verifyMemoryNotFree(
void* address, uint32_t spaceSize);
62 CacheManager& cache_manager() {
64 return *cache_manager_;
66 throw deluge::exception::NO_CACHE_FOR_REGION;
69#if ALPHA_OR_BETA_VERSION
75 friend class CacheManager;
76 friend class GeneralMemoryAllocator;
78 CacheManager* cache_manager_;
79 uint32_t numAllocations_{0};
80 uint32_t pivot_{pivot_big};
81 size_t maxAlign_ = max_align_big;
83 ptrdiff_t minAlign_ = min_align_big;
84 void markSpaceAsEmpty(uint32_t spaceStart, uint32_t spaceSize,
bool mayLookLeft =
true,
bool mayLookRight =
true);
86 attemptToGrabNeighbouringMemory(
void* originalSpaceAddress, int32_t originalSpaceSize, int32_t minAmountToExtend,
87 int32_t idealAmountToExtend,
void* thingNotToStealFrom,
88 uint32_t markWithTraversalNo = 0,
bool originalSpaceNeedsStealing =
false);
90 void writeTempHeadersBeforeASteal(uint32_t newStartAddress, uint32_t newSize);
92 uint32_t padSize(uint32_t requiredSize);