-
-size_t mmalloc_get_bytes_used(const xbt_mheap_t heap){
- const struct mdesc* heap_data = (const struct mdesc *) heap;
- return mmalloc_get_bytes_used_remote(heap_data->heaplimit, heap_data->heapinfo);
-}
-
-ssize_t mmalloc_get_busy_size(xbt_mheap_t heap, void *ptr){
-
- ssize_t block = ((char*)ptr - (char*)(heap->heapbase)) / BLOCKSIZE + 1;
- if(heap->heapinfo[block].type < 0)
- return -1;
- else if(heap->heapinfo[block].type == MMALLOC_TYPE_UNFRAGMENTED)
- return heap->heapinfo[block].busy_block.busy_size;
- else{
- ssize_t frag = ((uintptr_t) (ADDR2UINT (ptr) % (BLOCKSIZE))) >> heap->heapinfo[block].type;
- return heap->heapinfo[block].busy_frag.frag_size[frag];
- }
-
-}
-
-void mmcheck(xbt_mheap_t heap) {return;
- if (!heap->heapinfo)
- return;
- malloc_info* heapinfo = NULL;
- for (size_t i=1; i < heap->heaplimit; i += mmalloc_get_increment(heapinfo)) {
- heapinfo = heap->heapinfo + i;
- switch (heapinfo->type) {
- case MMALLOC_TYPE_HEAPINFO:
- case MMALLOC_TYPE_FREE:
- if (heapinfo->free_block.size==0) {
- xbt_die("Block size == 0");
- }
- break;
- case MMALLOC_TYPE_UNFRAGMENTED:
- if (heapinfo->busy_block.size==0) {
- xbt_die("Block size == 0");
- }
- if (heapinfo->busy_block.busy_size==0 && heapinfo->busy_block.size!=0) {
- xbt_die("Empty busy block");
- }
- break;
- default:
- if (heapinfo->type<0) {
- xbt_die("Unkown mmalloc block type.");
- }
- }
- }
-}