mm_initialize: malloc() return aligend pointer.
malloc() should return aligned (with MM_MIN_CHUNK) pointer, but pr #5906 destroy that, this pr find a better method to solve these questions. Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com> and Signed-off-by: wangbowen6 <wangbowen6@xiaomi.com>
This commit is contained in:
parent
1a4ccd2d70
commit
d4978bfba4
@ -93,11 +93,15 @@ void mm_addregion(FAR struct mm_heap_s *heap, FAR void *heapstart,
|
|||||||
|
|
||||||
DEBUGVERIFY(mm_takesemaphore(heap));
|
DEBUGVERIFY(mm_takesemaphore(heap));
|
||||||
|
|
||||||
/* Adjust the provided heap start and size so that they are both aligned
|
/* Adjust the provided heap start and size.
|
||||||
* with the MM_MIN_CHUNK size.
|
*
|
||||||
|
* Note: (uintptr_t)node + SIZEOF_MM_ALLOCNODE is what's actually
|
||||||
|
* returned to the malloc user, which should have natural alignment.
|
||||||
|
* (that is, in this implementation, MM_MIN_CHUNK-alignment.)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
heapbase = MM_ALIGN_UP((uintptr_t)heapstart);
|
heapbase = MM_ALIGN_UP((uintptr_t)heapstart + 2 * SIZEOF_MM_ALLOCNODE) -
|
||||||
|
2 * SIZEOF_MM_ALLOCNODE;
|
||||||
heapend = MM_ALIGN_DOWN((uintptr_t)heapstart + (uintptr_t)heapsize);
|
heapend = MM_ALIGN_DOWN((uintptr_t)heapstart + (uintptr_t)heapsize);
|
||||||
heapsize = heapend - heapbase;
|
heapsize = heapend - heapbase;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user