question about the calculation of overload bytes in function add_extent()

孙世龙 sunshilong369 at
Sun Apr 5 10:06:38 CEST 2020

Question about the calculation of overload memory in function add_extent()
in heapmem.c line:607(the source is listed below)
In the source code, notes that"overhead memory we need for storing our meta
data as calculated by HEAPMEM_ARENA_SIZE()".(The source of
HEAPMEM_ARENA_SIZE macro is also listed below.)
@@To simplify the problem,we ignore the alignment.@@
>From the HEAPMEM_ARENA_SIZE macro in code, we can draw the conclusion
So, the overhead i think is:
overhead = HEAPMEM_ARENA_SIZE(size)-size = sizeof(struct
If we use the representation explained in the source code, then
overhead = o = e+(a*p)/m
It's not equals to the calculation in the source, which is
        o = ((a * m + e * p) / (p + m))

@representation explained in source code(the whole source code is listed
 * o = overhead
 * e = sizeof(heapmem_extent)
 * m = HEAPMEM_PGMAP_BYTES  =sizeof(struct heapmem_pgentry)

Note: "__size/HEAPMEM_PAGE_SIZE" equals to "__size>>
HEAPMEM_PAGE_SHIFT"(which is the orignal code)

@source code of macro HEAPMEM_ARENA_SIZE
#define __HEAPMEM_MAP_SIZE(__nrpages) \
((__nrpages) * HEAPMEM_PGMAP_BYTES)
/*note by myslef :(__size)>>HEAPMEM_PAGE_SHIFT is the number of pages of
memory pool
__HEAPMEM_MAP_SIZE((__size) >> HEAPMEM_PAGE_SHIFT)calculats the memory size
for storing the struct of heapmem_pgentry。*/
#define __HEAPMEM_ARENA_SIZE(__size) \
(__size + \
 __align_to(sizeof(struct heapmem_extent) + \

 * Calculate the minimal size of the memory arena needed to contain a
 * heap of __user_size bytes, including our meta data for managing it.

More information about the Xenomai mailing list