added get minimal payload size function

This commit is contained in:
2026-06-08 19:37:59 +02:00
parent 6ea22a16e3
commit 69c318ed71
2 changed files with 9 additions and 4 deletions

View File

@@ -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

View File

@@ -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;
}