2000-02-18 03:39:52 +08:00
|
|
|
/* 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
|
2005-10-29 05:21:08 +08:00
|
|
|
<<mallinfo>>, <<malloc_stats>>, <<mallopt>>---malloc support
|
2000-02-18 03:39:52 +08:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2003-09-05 08:13:15 +08:00
|
|
|
#if !defined (_ELIX_LEVEL) || _ELIX_LEVEL >= 2
|
2000-02-18 03:39:52 +08:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2002-08-27 02:56:09 +08:00
|
|
|
#endif /* !_ELIX_LEVEL || _ELIX_LEVEL >= 2 */
|
|
|
|
|
2000-02-18 03:39:52 +08:00
|
|
|
#endif
|
|
|
|
|
2003-09-05 08:13:15 +08:00
|
|
|
#if !defined (_ELIX_LEVEL) || _ELIX_LEVEL >= 2
|
2002-08-27 02:56:09 +08:00
|
|
|
|
2000-02-18 03:39:52 +08:00
|
|
|
/* 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)
|
|
|
|
{
|
2005-02-08 09:33:19 +08:00
|
|
|
_REENT_SMALL_CHECK_INIT(ptr);
|
2000-02-18 03:39:52 +08:00
|
|
|
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
|
2002-08-27 02:56:09 +08:00
|
|
|
|
|
|
|
#endif /* !_ELIX_LEVEL || _ELIX_LEVEL >= 2 */
|
|
|
|
|
2000-02-18 03:39:52 +08:00
|
|
|
#endif /* ! defined (MALLOC_PROVIDED) */
|