size_t umm_free_heap_size( void ) {
  /*
   * To calculate free heap size, we take a number of free blocks
   * `umm_stat.free_blocks_cnt` and multiply it by the size of the block.
   *
   * We also take into account the allocation overhead: next/prev indexes pair
   * (`umm_ptr`) per allocation.
   */
  return ((size_t)umm_stat.free_blocks_cnt * sizeof(umm_block))
         - (umm_stat.free_entries_cnt * sizeof(umm_ptr));
}
size_t umm_free_heap_size( void ) {
   
  return ((size_t)umm_stat.free_blocks_cnt * sizeof(umm_block))
         - (umm_stat.free_entries_cnt * sizeof(umm_ptr));
}