How can I use M_MMAP_MAX?

Bruce Korb bruce.korb@gmail.com
Wed Apr 9 23:06:00 GMT 2008


I really expected this to work:

#include <malloc.h>

typedef void (malloc_init_t)   (void);

static malloc_init_t    malloc_init;

malloc_init_t * __malloc_initialize_hook = malloc_init;

static void
malloc_init(void)
{
    mallopt(M_MMAP_MAX, 0);
}

However, all the 132+892K mappings below are mmap-ed:

# pmap 4597|sed '1,/^15de/d'
15dfb000     16K rw---    [ anon ]
15e00000    132K rw---    [ anon ]
15e21000    892K -----    [ anon ]
15f00000    132K rw---    [ anon ]
15f21000    892K -----    [ anon ]
16000000    132K rw---    [ anon ]
16021000    892K -----    [ anon ]
16100000    132K rw---    [ anon ]
16121000    892K -----    [ anon ]

The last one is in current use.  The others are lost.
And, yes, I'm sure it is coming from malloc because when I use
the __malloc_hook stuff to capture larger allocations, these mappings
do not happen.  However, it hangs.  I have to go back and add some
pthread syncronization primitives, too.  Maybe that's all I need do?
Were you all having syncronization issues in glibc 2.3.2?

Thanks for your help.  Regards, Bruce



More information about the Libc-alpha mailing list