``phkmalloc''

Performance is comparable to gnumalloc if you have sufficient RAM, and
it screams around it if you don't.
Compiled with "EXTRA_SANITY" until further notice.
see malloc.3 for more details.
This commit is contained in:
phk 1995-09-16 09:28:13 +00:00
parent acf78c78b9
commit 3f27b3de03
3 changed files with 1136 additions and 386 deletions

View File

@ -14,10 +14,10 @@ SRCS+= abort.c atexit.c atof.c atoi.c atol.c bsearch.c calloc.c div.c \
MAN3+= stdlib/abort.3 stdlib/abs.3 stdlib/alloca.3 stdlib/atexit.3 \
stdlib/atof.3 stdlib/atoi.3 stdlib/atol.3 stdlib/bsearch.3 \
stdlib/calloc.3 stdlib/div.3 stdlib/exit.3 stdlib/free.3 \
stdlib/calloc.3 stdlib/div.3 stdlib/exit.3 \
stdlib/getenv.3 stdlib/getopt.3 stdlib/getsubopt.3 stdlib/labs.3 \
stdlib/ldiv.3 stdlib/malloc.3 stdlib/memory.3 stdlib/qsort.3 \
stdlib/radixsort.3 stdlib/rand.3 stdlib/random.3 stdlib/realloc.3 \
stdlib/radixsort.3 stdlib/rand.3 stdlib/random.3 \
stdlib/realpath.3 stdlib/strtod.3 stdlib/strtol.3 stdlib/strtoul.3 \
stdlib/system.3
@ -27,3 +27,4 @@ MLINKS+=rand.3 srand.3
MLINKS+=random.3 initstate.3 random.3 setstate.3 random.3 srandom.3
MLINKS+=strtol.3 strtoq.3
MLINKS+=strtoul.3 strtouq.3
MLINKS+=malloc.3 free.3 malloc.3 realloc.3

View File

@ -41,10 +41,20 @@
.Sh NAME
.Nm malloc ,
.Nd general memory allocation function
.Pp
.Nm free
.Nd free up memory allocated with malloc, calloc or realloc
.Pp
.Nm realloc
.Nd reallocation of memory function
.Sh SYNOPSIS
.Fd #include <stdlib.h>
.Ft void *
.Fn malloc "size_t size"
.Ft void
.Fn free "void *ptr"
.Ft void *
.Fn realloc "void *ptr" "size_t size"
.Sh DESCRIPTION
The
.Fn malloc
@ -61,30 +71,124 @@ suitably aligned (after possible pointer
coercion) for storage of any type of object. If the space is of
.Em pagesize
or larger, the memory returned will be page-aligned.
.Pp
The
.Fn free
function causes the space pointed to by
.Fa ptr
to be deallocated, that is, at least made available for further allocation,
but if possible, it will passed back to the kernel with
.Xr sbrk 2 .
If
.Fa ptr
is a null pointer, no action occurs.
.Pp
The
.Fn realloc
function changes the size of the object pointed to by
.Fa ptr
to the size specified by
.Fa size .
The contents of the object are unchanged up to the lesser
of the new and old sizes.
If the new size is larger, the value of the newly allocated portion
of the object is indeterminate.
If
.Fa ptr
is a null pointer, the
.Fn realloc
function behaves like the
.Fn malloc
function for the specified size.
If the space cannot be allocated, the object
pointed to by
.Fa ptr
is unchanged.
If
.Fa size
is zero and
.Fa ptr
is not a null pointer, the object it points to is freed.
.Pp
.Pp
The default is to compile with the ``SANITY'' option,
which trades a couple of percent of performance for rather rigorous
sanity checking of the arguments passed to
.Xr free
and
.Xr realloc .
.Pp
If compiled without the ``SANITY'' option and the argument does not
match a pointer earlier returned by the
.Xr calloc ,
.Xr malloc ,
or
.Xr realloc
function, or if the space has been deallocated by a call to
.Fn free
or
.Xr realloc ,
general havoc will be imminent.
.Sh ENVIRONMENT
This malloc will check the environment for a variable called
.Em MALLOC_OPTIONS
and scan it for flags.
Flags are single letters, uppercase means on, lowercase means off.
.Bl -tag -width indent
.It A
``abort'' malloc will coredump the process, rather that tollerate failure.
This is a very handy debugging aid, since the core file will represent the
time of failure, rather than when the NULL pointer was accessed.
.It D
``dump'' malloc will dump statistics in a file called ``malloc.out'' at exit.
.It R
``realloc'' always reallocate when
.Fn realloc
is called, even if the initial allocation was big enough.
This can substantially aid in compacting memory.
.El
.Sh RETURN VALUES
The
.Fn malloc
function returns
a pointer to the allocated space if successful; otherwise
a null pointer is returned.
.Pp
The
.Fn free
function returns no value.
.Pp
The
.Fn realloc
function returns either a null pointer or a pointer
to the possibly moved allocated space.
.Sh SEE ALSO
.Xr brk 2 ,
.Xr pagesize 2 ,
.Xr free 3 ,
.Xr calloc 3 ,
.Xr alloca 3 ,
.Xr realloc 3 ,
.Xr memory 3
.Sh STANDARDS
The
.Fn malloc
function conforms to
.St -ansiC .
.Sh BUGS
The current implementation of
.Xr malloc
does not always fail gracefully when system
memory limits are approached.
It may fail to allocate memory when larger free blocks could be broken
up, or when limits are exceeded because the size is rounded up.
It is optimized for sizes that are powers of two.
.Sh HISTORY
The present implementation of malloc started out as a filesystem on a drum
attached to a 20bit binary challenged computer built with discrete germanium
transistors, and it has since graduated to handle primary storage rather than
secondary.
.Pp
The main difference from other malloc implementations are belived to be that
the free pages are not accessed until allocated.
Most malloc implementations will store a data structure containing a,
possibly double-, linked list in the free chunks of memory, used to tie
all the free memory together.
That is a quite suboptimal thing to do.
Every time the free-list is traversed, all the otherwise unused, and very
likely paged out, pages get faulted into primary memory, just to see what
lies after them in the list.
.Pp
On systems which are paging, this can make a factor five in difference on the
pagefaults of a process.

File diff suppressed because it is too large Load Diff