This is a complete set of memory allocation functions (malloc and friends). The allocator is small, fast and space-efficient. It performs coalescing on frees. It has hooks for profiling, tracing and memory leak detection. It has very comprehensive and paranoid errorchecking as a compile time option, enough to detect most forms of heap corruption. Optionally, it attempts to be compatible with the proposed ANSI C Standard definition for the standard library functions malloc(), calloc(), realloc() and free(). By default, it is more or less compatible with existing Unix malloc() functions - some differences do exist. (Notably free(), cfree() returning void, realloc() not accepting a freed block) See the file malloc.doc for the full details. Porting to other machines shouldn't be hard if they have a civilized C compiler, and an sbrk(). Eventually, the goal is to make this malloc() conformant with ANSI C - it's getting there. It can be convinced to return void * and accept size_t, so you can use it for ANSI C conformant programs by defining ANSI_TYPES. Till then it's meant to be broadly conformant with Unix malloc()s. To compile it, make sure ALIGN (in align.h) is correct for your machine, and make it. testmalloc should run correctly and say Test done if it is working, producing amazing amounts of heap trace. If it dumps core, it isn't working... Depending on which end of the philosophical spectrum you lie, define -DBUGCOMPATIBILITY. If defined, malloc(0) will do the same thing as malloc(1). If not defined, the debugging malloc will abort() with an error, while the non-debugging malloc will return NULL. (and set errno to EINVAL). Note that the SVID requires malloc(0) to return NULL, and the May 13, 1988 ANSI C draft says that you can either return a NULL pointer or a unique pointer (typically decisive standard...) libmalloc.a is a fast, small version, with no debugging/profiling/tracing, while libmalloc_d.a is the version with all those three. (Profiling and tracing should not introduce serious overhead, since profiling is simple and fast, (one 'if' and increment), while tracing is turned off by default. So you may want to keep profiling and tracing in the fast version as well) make clean all will make libmalloc_d.a and the test programs. make clean libmalloc will make libmalloc.a. For linking convenience, you may want to compile the malloc as one file instead. To do that, simply make onefile.o. It concatenates all the src together and compiles it - the include files are protected against multiple inclusion. This has the advantage of compiling in things like mal_verify() and mal_trace() even if they aren't used, so you can use them when debugging. Mark Moraes. Computer Systems Research Institute, Univerity of Toronto. moraes@csri.toronto.{edu,cdn} moraes@csri.utoronto.ca moraes@utcsri.uucp {your favourite backbone}!uunet!utai!utcsri!moraes