Make sizeof(long) the default heap alignment.
authorcoderain <coderain@sdf.org>
Tue, 25 Sep 2018 13:44:43 +0000 (15:44 +0200)
committercoderain <coderain@sdf.org>
Tue, 25 Sep 2018 13:44:43 +0000 (15:44 +0200)
crt/src/malloc.c
kernel/src/heap.c

index 077878f67b4996c5455a12d76bac7d3479bc8010..c044c8f7c7d1336a89d4e9a48430b9b0bdcc4c1c 100644 (file)
@@ -293,6 +293,8 @@ void *__crt_heap_realloc(__crt_heap_t *heap, void *ptr, size_t alignment, size_t
 
         heap_header_t *new_block = (heap_header_t*)(aligned_start - sizeof(heap_header_t));
         memmove(new_block, hole, sizeof(heap_header_t));
+        if (heap->next_offset == (uintptr_t)hole - (uintptr_t)heap->base) heap->next_offset += padding;
+
         hole = new_block;
         hole->size -= padding;
     }
@@ -332,17 +334,17 @@ void *aligned_alloc(size_t alignment, size_t size)
 
 void *realloc(void *ptr, size_t size)
 {
-    return __crt_heap_realloc(__crt_default_heap, ptr, 1, size);
+    return __crt_heap_realloc(__crt_default_heap, ptr, sizeof(long), size);
 }
 
 void *malloc(size_t size)
 {
-    return __crt_heap_realloc(__crt_default_heap, NULL, 1, size);
+    return __crt_heap_realloc(__crt_default_heap, NULL, sizeof(long), size);
 }
 
 void free(void *ptr)
 {
-    __crt_heap_realloc(__crt_default_heap, ptr, 1, 0);
+    __crt_heap_realloc(__crt_default_heap, ptr, sizeof(long), 0);
 }
 
 void *calloc(size_t nmemb, size_t size)
index 7920f24991bafcc3c751d3f70a835b7a1552b368..f8693102921f897a93a44c8e22eaf8663bbca6cd 100644 (file)
@@ -45,17 +45,17 @@ static void heap_problem(int problem)
 
 void *heap_realloc(heap_t *heap, void *ptr, uintptr_t size)
 {
-    return __crt_heap_realloc(&heap->crt, ptr, 1, size);
+    return __crt_heap_realloc(&heap->crt, ptr, sizeof(long), size);
 }
 
 void *heap_alloc(heap_t *heap, uintptr_t size)
 {
-    return __crt_heap_realloc(&heap->crt, NULL, 1, size);
+    return __crt_heap_realloc(&heap->crt, NULL, sizeof(long), size);
 }
 
 void heap_free(heap_t *heap, void *ptr)
 {
-    __crt_heap_realloc(&heap->crt, ptr, 1, 0);
+    __crt_heap_realloc(&heap->crt, ptr, sizeof(long), 0);
 }
 
 dword_t heap_create(heap_t *heap, uintptr_t start, uintptr_t end, dword_t flags, dword_t magic)