mirror of
https://github.com/ToyB-Chan/minimal-heap.git
synced 2026-07-13 21:51:16 +02:00
added get minimal payload size function
This commit is contained in:
@@ -142,6 +142,8 @@ uint32_t MIHP_GenerateHeapSegmentChecksum(const MIHP_HeapSegmentHeader* segment)
|
|||||||
|
|
||||||
void MIHP_ValidateHeapMemoryAreaHeader(const MIHP_Heap* heap, const MIHP_HeapMemoryAreaHeader* area);
|
void MIHP_ValidateHeapMemoryAreaHeader(const MIHP_Heap* heap, const MIHP_HeapMemoryAreaHeader* area);
|
||||||
void MIHP_ValidateHeapSegmentHeader(const MIHP_Heap* heap, const MIHP_HeapSegmentHeader* segment);
|
void MIHP_ValidateHeapSegmentHeader(const MIHP_Heap* heap, const MIHP_HeapSegmentHeader* segment);
|
||||||
|
|
||||||
|
size_t MIHP_GetMinimalPayloadSize(const MIHP_Heap* heap);
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -108,10 +108,9 @@ void* MIHP_Allocate(MIHP_Heap* heap, size_t size)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
size_t segmentHeaderSize = MIHP_GetHeapAlignedSize(heap, sizeof(MIHP_HeapSegmentHeader));
|
size_t segmentHeaderSize = MIHP_GetHeapAlignedSize(heap, sizeof(MIHP_HeapSegmentHeader));
|
||||||
size_t minimalPayloadSize = heap->Config.AllocationAlignment;
|
|
||||||
MIHP_HeapSegmentHeader* targetSegment = NULL;
|
MIHP_HeapSegmentHeader* targetSegment = NULL;
|
||||||
|
|
||||||
if (currentSegment->SegmentSize >= 2 * segmentHeaderSize + size + minimalPayloadSize)
|
if (currentSegment->SegmentSize >= 2 * segmentHeaderSize + size + MIHP_GetMinimalPayloadSize(heap))
|
||||||
MIHP_SplitHeapSegment(currentSegment, segmentHeaderSize + size, &targetSegment);
|
MIHP_SplitHeapSegment(currentSegment, segmentHeaderSize + size, &targetSegment);
|
||||||
else if (currentSegment->SegmentSize >= segmentHeaderSize + size)
|
else if (currentSegment->SegmentSize >= segmentHeaderSize + size)
|
||||||
targetSegment = currentSegment;
|
targetSegment = currentSegment;
|
||||||
@@ -217,8 +216,7 @@ void* MIHP_Realloc(MIHP_Heap* heap, void* ptr, size_t newSize)
|
|||||||
segment->Checksum = MIHP_GenerateHeapSegmentChecksum(segment);
|
segment->Checksum = MIHP_GenerateHeapSegmentChecksum(segment);
|
||||||
|
|
||||||
size_t alignedNewSize = MIHP_GetHeapAlignedSize(heap, newSize);
|
size_t alignedNewSize = MIHP_GetHeapAlignedSize(heap, newSize);
|
||||||
size_t minimumPayloadSize = heap->Config.AllocationAlignment;
|
if (segment->SegmentSize > 2 * segmentHeaderSize + alignedNewSize + MIHP_GetMinimalPayloadSize(heap))
|
||||||
if (segment->SegmentSize > 2 * segmentHeaderSize + alignedNewSize + minimumPayloadSize)
|
|
||||||
{
|
{
|
||||||
size_t newSplitSegmentSize = segment->SegmentSize - segmentHeaderSize - alignedNewSize;
|
size_t newSplitSegmentSize = segment->SegmentSize - segmentHeaderSize - alignedNewSize;
|
||||||
|
|
||||||
@@ -632,3 +630,8 @@ void MIHP_ValidateHeapSegmentHeader(const MIHP_Heap* heap, const MIHP_HeapSegmen
|
|||||||
MIHP_PlatformOnHeapCorruptionDetected(corruptionInfo);
|
MIHP_PlatformOnHeapCorruptionDetected(corruptionInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t MIHP_GetMinimalPayloadSize(const MIHP_Heap* heap)
|
||||||
|
{
|
||||||
|
return heap->Config.AllocationAlignment;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user