Unused slabs which get recycled are no longer reinitialized from scratch if their chunk size matches what the allocator needed. If the chunk size matches, the list of available chunks is left unchanged, and just the various counters are reset.
Added __get_slab_stats() function.
Added support for global __slab_purge_threshold tuning variable.
Added a short test program for the slab allocator.
The malloc-test program was linked against the wrong object file in GNUmakefile.68k. Fixed.
If the first slab in the list of slabs which share the same chunk size has no more room, it means that all other slabs following it have no room either. This speeds up the test to find a slab with free space, which can now abort and directly proceed to allocate memory for a new slab.
If an empty slab's decay count hits zero, it is moved to the front of the empty slab list to be reclaimed more quickly.
Allocations made from the slab now carry a pointer back to the slab which they are a part of. This speeds up deallocation but has the downside of making the smallest usable slab chunk size 64 bytes, which is double what used to be the minimum before.
Added a slab allocator which replaces the use of memory pools or the plain AllocMem() operations, respectively. In order to activate the slab allocator, choose a slab size (e.g. 2048 bytes or 4096 bytes) and declare a global variable like this:
ULONG __slab_max_size = 2048;
Memory allocations smaller than the slab size will be made from "slabs", i.e. large chunks of memory of the given size. Larger allocations will be managed separately.
A slab-allocator can now be used as the back-end for all memory allocations by setting __slab_max_size to a value > 0. This controls the slab size used for allocations and should be a power of 2, such as 2048 or 4096 bytes.
This change still needs testing.
checking code. It never actually worked. The bit that does work is the stack
usage measurement code, plus the bit that sets up the the custom stack
according to local setting or by calling a query function.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15212 87f5fb63-7c3d-0410-a384-fd976d0f7a62
available only under OS4. There is a variant of dlopen() in libunix.a
which will perform a path name conversion. Note that these functions
will not work in the thread-safe variant of the library because it
would be unwise to tinker with the currently running program's binary.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15207 87f5fb63-7c3d-0410-a384-fd976d0f7a62
available only under OS4. There is a variant of dlopen() in libunix.a
which will perform a path name conversion.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15206 87f5fb63-7c3d-0410-a384-fd976d0f7a62
constructors are invoked, and after all local destructors have been
invoked.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15205 87f5fb63-7c3d-0410-a384-fd976d0f7a62
- Added support for ELF shared objects and libraries. This is implemented through
constructor/destructor functions, which means that you can use this
functionality even in Amiga Exec style shared libraries, with the proper
library initialization code to invoke the constructor/destructor functions
for you.
- Updated uname() to recognize AmigaOS 4.1.
- The translation from Unix to Amiga path names did not properly process
multiple occurences of "/./" in the path name. Thanks go to Steven Solie
for finding the issue.
- The detection of "/./" and "/../" patterns in Unix path names to be
translated into Amiga path names did not test if it was overrunning
the end of the string.
- If strcmp(), strncmp() and memcmp() detect a pair of different
characters, then the function result must be calculated as if the
characters were of type "unsigned char". This is a requirement
according to the ISO 'C' (1994) standard. Thanks go to Georg Steger
for finding the issue.
- The definitions for INT_MIN, INT_MAX and UINT_MAX in <limits.h> no
longer use long integer types, as prompted by Steven Solie.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15204 87f5fb63-7c3d-0410-a384-fd976d0f7a62
resolution.
- In tcflush() a break signal can no longer cause the read flush loop
to be quit with two semaphores still locked.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15170 87f5fb63-7c3d-0410-a384-fd976d0f7a62
stored in a low level unbuffered file/socket data structure. These function
perform the proper locking and are thus safe to use in a thread-safe environment.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15166 87f5fb63-7c3d-0410-a384-fd976d0f7a62
works for soft linked objects and returns an error for everything else.
This is based upon a fix by Peter Bengtsson. Thank you very much!
- Moved the lstat() local Lock() function into its own separate file.
- uname() now returns correct and robust information for OS version
numbers > 36. This integrates a fix by Peter Bengtsson. Thank you
very much!
- Moved the crtbegin.o/crtend.o files out of the link libraries. Moving
them in was intended to work as a fix for the shared library build, but
now it seems that this has to be done at the link stage through the
GCC specs file...
- Integrated a fix for __rem_pio2() which affects sin(), tan() and cos(),
contributed by Steven Solie. Thank you very much!
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15161 87f5fb63-7c3d-0410-a384-fd976d0f7a62
Steven Solie. Thank you very much!
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15135 87f5fb63-7c3d-0410-a384-fd976d0f7a62