/* 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 <>, <>, <>---malloc support INDEX mallinfo INDEX malloc_stats INDEX mallopt INDEX _mallinfo_r INDEX _malloc_stats_r INDEX _mallopt_r SYNOPSIS #include 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]>); DESCRIPTION <> returns a structure describing the current state of memory allocation. The structure is defined in malloc.h. The following fields are defined: <> is the total amount of space in the heap; <> is the number of chunks which are not in use; <> is the total amount of space allocated by <>; <> is the total amount of space not in use; <> is the size of the top most memory block. <> print some statistics about memory allocation on standard error. <> takes a parameter and a value. The parameters are defined in malloc.h, and may be one of the following: <> sets the maximum amount of unused space in the top most block before releasing it back to the system in <> (the space is released by calling <<_sbrk_r>> with a negative argument); <> 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 <> returns a mallinfo structure. The structure is defined in malloc.h. <> does not return a result. <> returns zero if the parameter could not be set, or non-zero if it could be set. PORTABILITY <> and <> are provided by SVR4, but <> takes different parameters on different systems. <> is not portable. */ #include <_ansi.h> #include #include #include #include #ifndef _REENT_ONLY struct mallinfo mallinfo (void) { return _mallinfo_r (_REENT); } #if !defined (_ELIX_LEVEL) || _ELIX_LEVEL >= 2 void malloc_stats (void) { _malloc_stats_r (_REENT); } int mallopt (int p, int v) { return _mallopt_r (_REENT, p, v); } #endif /* !_ELIX_LEVEL || _ELIX_LEVEL >= 2 */ #endif #if !defined (_ELIX_LEVEL) || _ELIX_LEVEL >= 2 /* 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 _mstats_r (struct _reent *ptr, char *s) { _REENT_SMALL_CHECK_INIT(ptr); fiprintf (_stderr_r (ptr), "Memory allocation statistics %s\n", s); _malloc_stats_r (ptr); } #ifndef _REENT_ONLY void mstats (char *s) { _mstats_r (_REENT, s); } #endif #endif /* !_ELIX_LEVEL || _ELIX_LEVEL >= 2 */ #endif /* ! defined (MALLOC_PROVIDED) */