glibc bug mmap/malloc

Alexandre Julliard julliard at winehq.com
Wed Jul 18 13:40:37 CDT 2001


Andreas Mohr <a.mohr at mailto.de> writes:

> You can clearly see that malloc() is able to squeeze up to 10232 bytes
> into the memory range just before the mmap()ed area, but when it gets
> slightly larger, it is NOT capable of switching to an entirely different
> memory area, throws its arms up in desperation and simply returns a shabby
> NULL.
> It only uses a new memory area in case the values get *much* larger,
> i.e. at least 131060 bytes.
> 
> This is a BUG.
> (IMHO)
> What else should it be ?

This is more a limitation of the malloc implementation than an actual
bug. malloc uses brk() to allocate memory, but brk() cannot grow past
an mmapped area, so malloc fails. With a standard Linux app shared
libraries are mapped high in memory (usually from 0x40000000) so the
malloc limit is about 1Gb; but if stuff is mapped lower, malloc
capacity is reduced. The reason it works for mallocs larger than 128Kb
is that glibc uses anonymous mmaps to reserve space for these instead
of brk().

All in all, it's probably one more good reason for avoiding malloc in
Wine.

-- 
Alexandre Julliard
julliard at winehq.com




More information about the wine-devel mailing list