diff --git a/minimal_heap.h b/minimal_heap.h index a7877e7..2707cca 100644 --- a/minimal_heap.h +++ b/minimal_heap.h @@ -102,6 +102,7 @@ typedef struct _MIHP_AllocationCustomMetadata uint8_t AsU8 [sizeof(size_t) * 2]; uint16_t AsU16 [sizeof(size_t) * 1]; uint32_t AsU32 [sizeof(size_t) / 2]; + void* AsPtr [sizeof(size_t) / 2]; uint64_t AsU64 [sizeof(size_t) / 4]; }; } MIHP_AllocationCustomMetadata; @@ -111,11 +112,12 @@ typedef struct _MIHP_HeapSegmentHeader size_t SegmentSize; size_t OccupiedSize; + struct _MIHP_AllocationCustomMetadata CustomMetadata; + struct _MIHP_HeapSegmentHeader* NextSegment; struct _MIHP_HeapSegmentHeader* PreviousSegment; struct _MIHP_HeapMemoryAreaHeader* OwningMemoryArea; - struct _MIHP_AllocationCustomMetadata CustomMetadata; uint32_t Checksum; // Checksum must be the last member ! } MIHP_HeapSegmentHeader; diff --git a/minimal_heap_implementation.inl b/minimal_heap_implementation.inl index d7c7dde..59b258a 100644 --- a/minimal_heap_implementation.inl +++ b/minimal_heap_implementation.inl @@ -194,9 +194,8 @@ void* MIHP_Allocate(MIHP_Heap* heap, size_t size) /// size_t newAreaSize = heap->Stats.TotalSize / 4; // growth-rate of 1.25 - while (newAreaSize < size) - newAreaSize = MIHP_MIN(heap->Config.MaxMemoryAreaSize, newAreaSize + newAreaSize / 4); + newAreaSize = newAreaSize + newAreaSize / 4; MIHP_HeapMemoryAreaHeader* newArea = MIHP_CreateHeapMemoryArea(heap, newAreaSize); if (newArea == NULL) diff --git a/minimal_heap_test.cpp b/minimal_heap_test.cpp index ff0e663..407ae4d 100644 --- a/minimal_heap_test.cpp +++ b/minimal_heap_test.cpp @@ -45,7 +45,6 @@ int main() config.PlatformRequestMemoryFn = RequestMemory; config.PlatformFreeMemoryFn = FreeMemory; config.OnHeapCorruptionDetectedFn = OnHeapCorruptionDetectedCallback; - config.MaxMemoryAreaSize *= 16; config.HeapValidationMode = MIHP_HVM_MagicNumber; @@ -59,19 +58,18 @@ int main() myptrs[i] = malloc(size); #else myptrs[i] = MIHP_Allocate(&myHeap, size); + MIHP_ASSERT(myptrs[i]); MIHP_AllocationCustomMetadata metadata = { 0 }; void* ptr = GetThisAddress(); - memcpy(&metadata.AsU8, &ptr, sizeof(void*)); + metadata.AsPtr[0] = ptr; MIHP_SetPointerCustomMetadata(&myHeap, myptrs[i], metadata); MIHP_ValidateHeap(&myHeap); MIHP_AllocationCustomMetadata outMetadata = { 0 }; MIHP_GetPointerCustomMetadata(&myHeap, myptrs[i], &outMetadata); - void* returnPtr; - - memcpy(&returnPtr, &outMetadata.AsU8, sizeof(void*)); + void* returnPtr = outMetadata.AsPtr[0]; MIHP_ASSERT(ptr == returnPtr); #endif