Heap allocate size ...

debugasm wrote on Tuesday, March 29, 2016:


in my application I use a heap memory with code of “heap_4”. I have the need to use the “realloc” function to provide a already allocated memory area. I have write a wrapper to this function on “heap_4” but I realized now that I do not know the size of the old allocation to copy the old content to the new memory area.

There is a function “malloc_usable_size” that returns this value but how implement this routine in “heap_4” ?

You can know the size of a memory block allocated by vPortMalloc ?

Thanks very much.


rtel wrote on Tuesday, March 29, 2016:

The size of every block is stored in a BlockLink_t structure, in the
allocated block itself. See the implementation of vPortFree() for an
example of how it is accessed.

debugasm wrote on Tuesday, March 29, 2016:

I understand, thank you so much.


debugasm wrote on Wednesday, March 30, 2016:

To be precise:

// The block is being returned to the heap - it is no longer allocated.
block_size = (pxLink->xBlockSize & ~xBlockAllocatedBit) - xHeapStructSize;

Obtain block size allocate by “pvPortMalloc” rounded to “BYTE_ALIGNMENT”