diff options
author | Christopher Faylor <me@cgf.cx> | 2000-02-17 19:39:52 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2000-02-17 19:39:52 +0000 |
commit | 8a0efa53e44919bcf5ccb1d3353618a82afdf8bc (patch) | |
tree | 68c3dbf3f2c6fd5d49777def9914d77b5cd4589d /newlib/libc/stdlib/mstats.c | |
parent | 1fd5e000ace55b323124c7e556a7a864b972a5c4 (diff) | |
download | cygnal-8a0efa53e44919bcf5ccb1d3353618a82afdf8bc.tar.gz cygnal-8a0efa53e44919bcf5ccb1d3353618a82afdf8bc.tar.bz2 cygnal-8a0efa53e44919bcf5ccb1d3353618a82afdf8bc.zip |
import newlib-2000-02-17 snapshot
Diffstat (limited to 'newlib/libc/stdlib/mstats.c')
-rw-r--r-- | newlib/libc/stdlib/mstats.c | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/newlib/libc/stdlib/mstats.c b/newlib/libc/stdlib/mstats.c new file mode 100644 index 000000000..c1628957a --- /dev/null +++ b/newlib/libc/stdlib/mstats.c @@ -0,0 +1,151 @@ +/* VxWorks provides its own version of malloc, and we can't use this + one because VxWorks does not provide sbrk. So we have a hook to + not compile this code. */ + +#ifdef MALLOC_PROVIDED + +int _dummy_mstats = 1; + +#else + +/* +FUNCTION +<<mallinfo>>, <<malloc_stats>>, <<mallopt>>--malloc support + +INDEX + mallinfo +INDEX + malloc_stats +INDEX + mallopt +INDEX + _mallinfo_r +INDEX + _malloc_stats_r +INDEX + _mallopt_r + +ANSI_SYNOPSIS + #include <malloc.h> + struct mallinfo mallinfo(void); + void malloc_stats(void); + int mallopt(int <[parameter]>, <[value]>); + + struct mallinfo _mallinfo_r(void *<[reent]>); + void _malloc_stats_r(void *<[reent]>); + int _mallopt_r(void *<[reent]>, int <[parameter]>, <[value]>); + +TRAD_SYNOPSIS + #include <malloc.h> + struct mallinfo mallinfo(); + + void malloc_stats(); + + int mallopt(<[parameter]>, <[value]>) + int <[parameter]>; + int <[value]>; + + struct mallinfo _mallinfo_r(<[reent]>); + char *<[reent]>; + + void _malloc_stats_r(<[reent]>); + char *<[reent]>; + + int _mallopt_r(<[reent]>, <[parameter]>, <[value]>) + char *<[reent]>; + int <[parameter]>; + int <[value]>; + +DESCRIPTION +<<mallinfo>> returns a structure describing the current state of +memory allocation. The structure is defined in malloc.h. The +following fields are defined: <<arena>> is the total amount of space +in the heap; <<ordblks>> is the number of chunks which are not in use; +<<uordblks>> is the total amount of space allocated by <<malloc>>; +<<fordblks>> is the total amount of space not in use; <<keepcost>> is +the size of the top most memory block. + +<<malloc_stats>> print some statistics about memory allocation on +standard error. + +<<mallopt>> takes a parameter and a value. The parameters are defined +in malloc.h, and may be one of the following: <<M_TRIM_THRESHOLD>> +sets the maximum amount of unused space in the top most block before +releasing it back to the system in <<free>> (the space is released by +calling <<_sbrk_r>> with a negative argument); <<M_TOP_PAD>> is the +amount of padding to allocate whenever <<_sbrk_r>> is called to +allocate more space. + +The alternate functions <<_mallinfo_r>>, <<_malloc_stats_r>>, and +<<_mallopt_r>> are reentrant versions. The extra argument <[reent]> +is a pointer to a reentrancy structure. + +RETURNS +<<mallinfo>> returns a mallinfo structure. The structure is defined +in malloc.h. + +<<malloc_stats>> does not return a result. + +<<mallopt>> returns zero if the parameter could not be set, or +non-zero if it could be set. + +PORTABILITY +<<mallinfo>> and <<mallopt>> are provided by SVR4, but <<mallopt>> +takes different parameters on different systems. <<malloc_stats>> is +not portable. + +*/ + +#include <_ansi.h> +#include <reent.h> +#include <stdlib.h> +#include <malloc.h> +#include <stdio.h> + +#ifndef _REENT_ONLY + +struct mallinfo +_DEFUN_VOID (mallinfo) +{ + return _mallinfo_r (_REENT); +} + +void +_DEFUN_VOID (malloc_stats) +{ + _malloc_stats_r (_REENT); +} + +int +_DEFUN (mallopt, (p, v), + int p _AND + int v) +{ + return _mallopt_r (_REENT, p, v); +} + +#endif + +/* mstats is now compatibility code. It used to be real, for a + previous version of the malloc routines. It now just calls + malloc_stats. */ + +void +_DEFUN (_mstats_r, (ptr, s), + struct _reent *ptr _AND + char *s) +{ + fiprintf (_stderr_r (ptr), "Memory allocation statistics %s\n", s); + _malloc_stats_r (ptr); +} + +#ifndef _REENT_ONLY +void +_DEFUN (mstats, (s), + char *s) +{ + _mstats_r (_REENT, s); +} + +#endif +#endif /* ! defined (MALLOC_PROVIDED) */ |