110 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* mstats.h - definitions for malloc statistics */
 | |
| 
 | |
| /*  Copyright (C) 2001-2003 Free Software Foundation, Inc.
 | |
| 
 | |
|     This file is part of GNU Bash, the Bourne-Again SHell.
 | |
| 
 | |
|    Bash is free software: you can redistribute it and/or modify
 | |
|    it under the terms of the GNU General Public License as published by
 | |
|    the Free Software Foundation, either version 3 of the License, or
 | |
|    (at your option) any later version.
 | |
| 
 | |
|    Bash is distributed in the hope that it will be useful,
 | |
|    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|    GNU General Public License for more details.
 | |
| 
 | |
|    You should have received a copy of the GNU General Public License
 | |
|    along with Bash.  If not, see <http://www.gnu.org/licenses/>.
 | |
| */
 | |
| 
 | |
| #ifndef _MSTATS_H
 | |
| #define _MSTATS_H
 | |
| 
 | |
| #include "imalloc.h"
 | |
| 
 | |
| #ifdef MALLOC_STATS
 | |
| 
 | |
| #ifndef NBUCKETS
 | |
| #  define NBUCKETS 30
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * NMALLOC[i] is the difference between the number of mallocs and frees
 | |
|  * for a given block size.  TMALLOC[i] is the total number of mallocs for
 | |
|  * a given block size.  NMORECORE[i] is the total number of calls to
 | |
|  * morecore(i).  NLESSCORE[i] is the total number of calls to lesscore(i).
 | |
|  *
 | |
|  * NMAL and NFRE are counts of the number of calls to malloc() and free(),
 | |
|  * respectively.  NREALLOC is the total number of calls to realloc();
 | |
|  * NRCOPY is the number of times realloc() had to allocate new memory and
 | |
|  * copy to it.  NRECURSE is a count of the number of recursive calls to
 | |
|  * malloc() for the same bucket size, which can be caused by calls to
 | |
|  * malloc() from a signal handler.
 | |
|  *
 | |
|  * NSBRK is the number of calls to sbrk() (whether by morecore() or for
 | |
|  * alignment); TSBRK is the total number of bytes requested from the kernel
 | |
|  * with sbrk().
 | |
|  *
 | |
|  * BYTESUSED is the total number of bytes consumed by blocks currently in
 | |
|  * use; BYTESFREE is the total number of bytes currently on all of the free
 | |
|  * lists.  BYTESREQ is the total number of bytes requested by the caller
 | |
|  * via calls to malloc() and realloc().
 | |
|  *
 | |
|  * TBSPLIT is the number of times a larger block was split to satisfy a
 | |
|  * smaller request. NSPLIT[i] is the number of times a block of size I was
 | |
|  * split.
 | |
|  *
 | |
|  * TBCOALESCE is the number of times two adjacent smaller blocks off the free
 | |
|  * list were combined to satisfy a larger request.
 | |
|  */
 | |
| struct _malstats {
 | |
|   int nmalloc[NBUCKETS];
 | |
|   int tmalloc[NBUCKETS];
 | |
|   int nmorecore[NBUCKETS];
 | |
|   int nlesscore[NBUCKETS];
 | |
|   int nmal;
 | |
|   int nfre;
 | |
|   int nrealloc;
 | |
|   int nrcopy;
 | |
|   int nrecurse;
 | |
|   int nsbrk;
 | |
|   bits32_t tsbrk;
 | |
|   bits32_t bytesused;
 | |
|   bits32_t bytesfree;
 | |
|   u_bits32_t bytesreq;
 | |
|   int tbsplit;
 | |
|   int nsplit[NBUCKETS];
 | |
|   int tbcoalesce;
 | |
|   int ncoalesce[NBUCKETS];
 | |
| };
 | |
| 
 | |
| /* Return statistics describing allocation of blocks of size BLOCKSIZE.
 | |
|    NFREE is the number of free blocks for this allocation size.  NUSED
 | |
|    is the number of blocks in use.  NMAL is the number of requests for
 | |
|    blocks of size BLOCKSIZE.  NMORECORE is the number of times we had
 | |
|    to call MORECORE to repopulate the free list for this bucket.
 | |
|    NLESSCORE is the number of times we gave memory back to the system
 | |
|    from this bucket.  NSPLIT is the number of times a block of this size
 | |
|    was split to satisfy a smaller request.  NCOALESCE is the number of
 | |
|    times two blocks of this size were combined to satisfy a larger
 | |
|    request. */
 | |
| struct bucket_stats {
 | |
|   u_bits32_t blocksize;
 | |
|   int nfree;
 | |
|   int nused;
 | |
|   int nmal;
 | |
|   int nmorecore;
 | |
|   int nlesscore;
 | |
|   int nsplit;
 | |
|   int ncoalesce;
 | |
| };
 | |
| 
 | |
| extern struct bucket_stats malloc_bucket_stats __P((int));
 | |
| extern struct _malstats malloc_stats __P((void));
 | |
| extern void print_malloc_stats __P((char *));
 | |
| extern void trace_malloc_stats __P((char *, char *));
 | |
| 
 | |
| #endif /* MALLOC_STATS */
 | |
| 
 | |
| #endif /* _MSTATS_H */
 | 
