On Tue, Jan 16, 2007 at 01:18:00AM +0200, sr@altlinux.ru wrote: > On Tue, Jan 16, 2007 at 12:37:28AM +0200, Michael Shigorin wrote: > > On Mon, Jan 15, 2007 at 11:33:03PM +0200, sr@altlinux.ru wrote: > > > > Скажите sr@, что glibc malloc уже давно использует mmap. > > > > См. тж. http://sourceware.org/ml/libc-alpha/2006-11/msg00061.html > > > Агащазблин. > > > > Скажем так -- "умеет использовать mmap", > > Не так, "не умеет использовать mmap", потому что mmap()/mremap()/munmap() > не может использоваться в прямую для malloc()/realloc()/free(), это > сразу дыры между vm_area_struct, т.е. фрагментацию на уровне юзерспэйса они > заменяют фрагментацией в ядре, хотя и в юзерспэйсе фрагментация не отменяется. > А там это таки так для больших кусков памяти. Это openbsd malloc целиком построен на mmap. А glibc malloc имени Wolfram Gloger/Doug Lea по прежнему использует brk для размещения объектов малого размера. Так в чём вопрос был? Как минимизировать фрагментацию памяти долгоживущего приложения, у которого средний размер размещаемого объёкта около 24 байт? Полагаю, что эффект от использования специализированного allocator'а будет больше чем от замены универсального malloc'а. Другое дело что внедрить такой allocator в чужой софт немалого размера может оказаться даже сложнее чем поменять malloc. -- ldv