-------------------------------------------------------------------------------
$Id: TTD,v 1.19 1993/04/05 01:28:49 gray Exp $
-------------------------------------------------------------------------------

IMPORTANT:

- add special-blocks with a sorted-free list
	- over X bits then it becomes special
	- if in free special and someone matches then drop the rest of
		the allocation into a free list maybe, maybe-not
- be able to break up bigger blocks of memory into small ones
	- have a split(x) which asks for x+1 bits and then splits it into
		2 blocks of x bits
	- split then might go recursive
	- maybe have a level X and only jump up a maximum of X bits to find
		free space (depending on how much you want to fragment)
- change the large block allocation process:
	- needs to be a lot cleaner and produce a denser heap

-------------------------------------------------------------------------------

CHECKING:

- check in heap_check the cleared space above each allocation instead of
	only the fence posts
- maybe write the address % 256 into bytes instead of a constant
	- maybe it would slow it down.
	- a token/option?
	- \305 is recognizable however
- another token to have the library never reclaim memory, always extend the
	heap (i.e. don't use free lists at all)
	- this would grow into an enormous heap however.
- maybe add another debug level which stores crc information about internal
	heap structures and verifies it during run time.  slow, slow!!

-------------------------------------------------------------------------------

STRING SUPPORT:

- have special macros for string allocation for string functions.  possibly
	uppercase or normal overrides.
- maybe build in most string functions (strcat, strcpy, etc)
- have a checking level/value that runs though the strings and makes sure
	they have a NULL in them.
- this may not be too important in the face of the bounds checking stuff but
	it may report errors more intelligently
- need to think if more support for strings would be a good thing
- it would be able to locate common errors with strings a lot closer to the
	actual problem.
- inform the user to include the string stuff at the end of include list

-------------------------------------------------------------------------------

GENERAL:

- for fence underflow, print out the allocation below and for fence overflow
	the allocation above if possible
- maybe expand_string dump the first X bytes of an allocation per a token
- add __builtin_return_value support for higher gcc versions (2.2.0+)
- have either a bunch of free or used bblocks be:
	- start block and then a set of continuation blocks
	- this would mean we do not have to hit each bblock entry to redo
		the type flag
- handle memalign, valloc, maybe some form of mallopt
- maybe use getpagesize (mach_dep.c) to determine BASIC block size
- handle 0 length allocations correctly if the #define is set
	- i.e. maybe give back a small section with bounds-checking touching
- manage dblock_admin entries better
	- map out usage and get some stats
	- add to normal db_free lists, zero out each of the entries.  if they
		are both zero or some magic X then we need to get more bblock
		space for the dblocks.
- special case last bunch of bblocks:
	- have a pointer to the last contiguous set
	- have them not in a free list
	- if used and reallocs then just extend it
	- if free and need some of it then extend (or not) and give
	- maybe not worth it for 1 pointer
- maybe make malloc_dbg use no stdio so no unwanted memory allocations.
- turn realloc into an intelligent beasty that looks on either side
	of existing chunk (if expanding) for free space and manages free-lists
	appropriately

-------------------------------------------------------------------------------

TESTING / STATISTICS:

- need to write a set of fully automated test programs
	- maybe start with a test shell like malloc_t but stripped and then
		run a script through it and analyse the output
	- should be a killer that does a million hits
- test define for allowing 0 length defines
- test define for realloc(NULL)
- check out situation where sbrk calls return ERROR (from the beginning and
	in the middle).  the library should return NULL's straight off and
	log appropriate errors.
- add free-list statistics whenever it gets more memory to see the viability of
	dividing larger free entries in two
- add statistics whenever it frees memory to see the viability of combining
	adjacent blocks
- maybe a program that would try a standard set of tests on a number of
	different combinations of debug-values to look for dependancies.

-------------------------------------------------------------------------------

RMS comments:
	- integrate into gnu-malloc
	- change the bit-flags into the functionality strings themselves
	- get rid of the malloc_dbg program and the mallocrc file (too "hairy")
	- integrate __builtin_return_address functionality from gcc
		gdb command 'info line *ADDRESS' to get file/line

-------------------------------------------------------------------------------
