|
|
|
|
|
|
|
This malloc is based on Doug Lea's malloc ( ftp://gee.cs.oswego.edu/pub/misc/ ), the changes
|
|
|
|
are listed below. See http://lists.kde.org/?l=kde-core-devel&m=101351949010285&w=2 for details.
|
|
|
|
Basically, it's here because for now it has better performance than both glibc-2.2.x and
|
|
|
|
FreeBSD's libc.
|
|
|
|
|
|
|
|
There's a new configure switch, --enable-fast-malloc. By default it's turned off, disabling
|
|
|
|
the system libc one and using this one. Using --enable-fast-malloc=full enables this
|
|
|
|
malloc unconditionally, aiming for the maximum performance. By using only --enable-fast-malloc,
|
|
|
|
it's possible to select both malloc implementations at runtime. When $TDE_MALLOC is set to 0,
|
|
|
|
the system libc malloc is used, otherwise this malloc is used.
|
|
|
|
|
|
|
|
For now, the requirements are :
|
|
|
|
- x86 CPU (because of the spinlock implementation in assembler), it should be easy to add
|
|
|
|
new ones
|
|
|
|
- glibc (for --enable-fast-malloc=yes, =full doesn't need it), because it needs to refer
|
|
|
|
to the libc implementation of malloc (__libc_malloc etc.)
|
|
|
|
- gcc (for __inline__ , nothing else should depend on gcc)
|
|
|
|
|
|
|
|
|
|
|
|
If you have any problem with this malloc, try first using --enable-fast-malloc=debug and
|
|
|
|
recompiling libtdecore, or use valgrind. This malloc seems to be more vulnerable to heap
|
|
|
|
corruption, such as deleting a block twice, so faulty code may run without problems
|
|
|
|
with standard malloc shipped with your libc, but it will crash with this malloc. In case
|
|
|
|
you think there's any problem with this malloc, please mail me.
|
|
|
|
|
|
|
|
changes (against malloc-2.7.0):
|
|
|
|
|
|
|
|
#define USE_MALLOC_LOCK
|
|
|
|
#define INLINE __inline__
|
|
|
|
#define USE_MEMCPY 0
|
|
|
|
#define MMAP_CLEARS 1
|
|
|
|
made all functions INLINE
|
|
|
|
added #ifdef TDE_MALLOC_DEBUG -> #define DEBUG
|
|
|
|
reordered all functions in order to avoid 'warning: `XYZ' declared inline after being called'
|
|
|
|
especially moved the public_* ones at the end of the file
|
|
|
|
commented out #including malloc.h
|
|
|
|
added #include <config.h> at the top and enclosed whole file in #ifdef TDE_MALLOC
|
|
|
|
taken posix_memalign() from glibc
|
|
|
|
removed public icalloc(),icomalloc(),mtrim(),musable() (they don't exist everywhere anyway)
|
|
|
|
enclosed the pthreads part by #if 0 and replaced it with spinlock from glibc CVS (in x86.h)
|
|
|
|
also added :
|
|
|
|
----------
|
|
|
|
static mutex_t spinlock = MUTEX_INITIALIZER;
|
|
|
|
#define MALLOC_PREACTION lock( &spinlock )
|
|
|
|
#define MALLOC_POSTACTION unlock( &spinlock )
|
|
|
|
----------
|
|
|
|
public functions call either functions in this malloc or in libc, depending on $TDE_MALLOC
|
|
|
|
the kde_malloc_is_used hack
|
|
|
|
|
|
|
|
|
|
|
|
TODO:
|
|
|
|
malloc_set_state/malloc_get_state ?
|
|
|
|
|
|
|
|
|
|
|
|
Lubos Lunak <l.lunak@kde.org>
|