Format
#include <umalloc.h> int _ustats(Heap_t heap, _HEAPSTATS *hpinfo);
Language Level: Extension
_ustats gets information about the heap
you specify and stores it in the hpinfo structure you
pass to it.
The _HEAPSTATS structure type is defined in <umalloc.h>. The members it contains and the information that _ustats stores in each is as follows:
| _provided | How much memory the heap holds (excluding memory used for overhead for the heap). |
| _used | How much memory is currently allocated from the heap. |
| _shared | Whether the memory is shared (_shared is 1) or not (_shared is 0). |
| _maxfree | The size of the largest contiguous piece of memory available on the heap. |
| _pool_minsize | Minimum size of pool. |
| _pool_maxsize | Maximum size of pool. |
| _pool_totalbytes | Total size of objects available within pool. |
| _pool_allocs | Quantity of allocations performed within pool. |
| _pool_frees | Quantity of releases performed within pool. |
| _allocs | Quantity of allocations performed within heap and pool. |
| _frees | Quantity of releases performed within heap and pool. |
| _pool_alignment | Alignment of returned object from pool. |
You can obtain these statistics, using _ustats, to indicate the success of the pooling sizes specified via _upool.
Return Value
If successful, _ustats returns 0. A
nonzero return code indicates failure. Passing _ustats a heap
that is not valid results in undefined behavior.
Example
This example creates a heap and allocates
memory from it. It then calls _ustats to print out information
about the heap.
#include <stdlib.h> #include <stdio.h> #include <umalloc.h>
int main(void)
{
Heap_t myheap;
_HEAPSTATS myheap_stat;
char *ptr;
/* Use default heap as user heap */ myheap = _udefault(NULL);
if (NULL == (ptr = (char*)_umalloc(myheap, 100))) {
puts("Cannot allocate memory from user heap.");
exit(EXIT_FAILURE);
}
if (0 != _ustats(myheap, &myheap_stat)) {
puts("_ustats failed.");
exit(EXIT_FAILURE);
}
printf ("_provided: %u\n", myheap_stat._provided);
printf ("_used : %u\n", myheap_stat._used);
printf ("_tiled : %u\n", myheap_stat._tiled);
printf ("_shared : %u\n", myheap_stat._shared);
printf ("_max_free: %u\n", myheap_stat._max_free);
free(ptr);
return 0;
/****************************************************
The output should be similar to :
_provided: 65264
_used : 14304
_tiled : 0
_shared : 0
_max_free: 50960
*****************************************************/
}
![]()
_mheap -- Query Memory Heap
for Allocated Object
_ucreate --
Create a Memory Heap
_upool -- Create a
Memory Pool
<umalloc.h>