From 69e69740b5f578e035befc762538b282d91ed1ba Mon Sep 17 00:00:00 2001 From: wangbowen6 Date: Mon, 21 Feb 2022 18:22:40 +0800 Subject: [PATCH] mm_heap: heapsize align with MM_MIN_CHUNK. Signed-off-by: wangbowen6 --- mm/mm_heap/mm.h | 4 ++++ mm/mm_heap/mm_initialize.c | 12 ++++++------ mm/mm_heap/mm_mallinfo.c | 5 ++++- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/mm/mm_heap/mm.h b/mm/mm_heap/mm.h index 9ea235ecd3..5abe074b20 100644 --- a/mm/mm_heap/mm.h +++ b/mm/mm_heap/mm.h @@ -146,6 +146,10 @@ #define SIZEOF_MM_FREENODE sizeof(struct mm_freenode_s) +/* What is the size of the start/end node? */ + +#define SIZEOF_MM_STARTENDNODE MM_MIN_CHUNK + /**************************************************************************** * Public Types ****************************************************************************/ diff --git a/mm/mm_heap/mm_initialize.c b/mm/mm_heap/mm_initialize.c index e32c63cdac..06fd9e652f 100644 --- a/mm/mm_heap/mm_initialize.c +++ b/mm/mm_heap/mm_initialize.c @@ -118,15 +118,15 @@ void mm_addregion(FAR struct mm_heap_s *heap, FAR void *heapstart, heap->mm_heapstart[IDX] = (FAR struct mm_allocnode_s *) heapbase; MM_ADD_BACKTRACE(heap, heap->mm_heapstart[IDX]); - heap->mm_heapstart[IDX]->size = SIZEOF_MM_ALLOCNODE; + heap->mm_heapstart[IDX]->size = SIZEOF_MM_STARTENDNODE; heap->mm_heapstart[IDX]->preceding = MM_ALLOC_BIT; node = (FAR struct mm_freenode_s *) - (heapbase + SIZEOF_MM_ALLOCNODE); - node->size = heapsize - 2*SIZEOF_MM_ALLOCNODE; - node->preceding = SIZEOF_MM_ALLOCNODE; + (heapbase + SIZEOF_MM_STARTENDNODE); + node->size = heapsize - 2*SIZEOF_MM_STARTENDNODE; + node->preceding = SIZEOF_MM_STARTENDNODE; heap->mm_heapend[IDX] = (FAR struct mm_allocnode_s *) - (heapend - SIZEOF_MM_ALLOCNODE); - heap->mm_heapend[IDX]->size = SIZEOF_MM_ALLOCNODE; + (heapend - SIZEOF_MM_STARTENDNODE); + heap->mm_heapend[IDX]->size = SIZEOF_MM_STARTENDNODE; heap->mm_heapend[IDX]->preceding = node->size | MM_ALLOC_BIT; MM_ADD_BACKTRACE(heap, heap->mm_heapend[IDX]); diff --git a/mm/mm_heap/mm_mallinfo.c b/mm/mm_heap/mm_mallinfo.c index 7ecdc039e3..3144e48a39 100644 --- a/mm/mm_heap/mm_mallinfo.c +++ b/mm/mm_heap/mm_mallinfo.c @@ -121,7 +121,10 @@ int mm_mallinfo(FAR struct mm_heap_s *heap, FAR struct mallinfo *info) mm_foreach(heap, mallinfo_handler, info); info->arena = heap->mm_heapsize; - info->uordblks += region * SIZEOF_MM_ALLOCNODE; /* account for the tail node */ + + /* Account for the tail node */ + + info->uordblks += region * SIZEOF_MM_STARTENDNODE; DEBUGASSERT(info->uordblks + info->fordblks == heap->mm_heapsize);