Firefox и memory allocator из OpenBSD в Linux

firefox-logo-sm.pngМногие жалуются на то, что в Firefox утекает память. На самом деле это не совсем так, она просто фрагментируется. Это особенность реализации malloc - функции выделения памяти в linux-glibc, которая выделяет память одним большим куском.

В OpenBSD используется другой аллокатор, выделяющий память отдельной областью, пропорциональной размеру страницы. Он значительно менее подвержен фрагментации. Его-то я и использую совместно с Firefox и Thunderbird.

Приступим к установке. Качаем исходник тут, компилируем:

diamon@geldern:~$ wget http://truediamon.ru/system/files/OpenBSD_malloc_Linux.c
diamon@geldern:~$ gcc -shared -fPIC -O2 OpenBSD_malloc_Linux.c -o ~/lib/malloc.so

Конечно кроме как в ~/lib/ можно положить куда угодно. Лучше наверное в /usr/lib/, поправьте в комментах, как идеологически правильнее.
Запускаем так:
diamon@geldern:~$ LD_PRELOAD=~/lib/malloc.so firefox

лучше создать в ~/.bashrc алиас:
diamon@geldern:~$ cat .bashrc | grep firefox
alias firefox="LD_PRELOAD=~/lib/malloc.so firefox"

В приложении к посту исходник и скомпиленый мною на p3 бинарник.

ВложениеРазмер
OpenBSD_malloc_Linux.c44.09 КБ
malloc.so18.74 КБ
4.25
Средняя: 4.3 (4 голоса)
Ваша оценка: Нет

Comments :

Аватар пользователя Анонимный

интересно, как обстоят дела с

интересно, как обстоят дела с этим сейчас?

Аватар пользователя solarisadmin

Не, так и не получилось :(

Не, так и не получилось :(

Аватар пользователя boombick

У меня так и не заработало..

У меня так и не заработало.. Debian. Но, в приципе, на FF я и не жалуюсь особо

Аватар пользователя Angel2S2

Вот на что ругается...

2

In file included from /usr/include/sys/param.h:26,
                 from OpenBSD_malloc_Linux.c:46:
/usr/include/limits.h:125:26: error: no include path in which to search for limits.h
In file included from OpenBSD_malloc_Linux.c:54:
/usr/include/limits.h:125:26: error: no include path in which to search for limits.h
OpenBSD_malloc_Linux.c: В функции ‘malloc_make_chunks’:
OpenBSD_malloc_Linux.c:1022: ошибка: ‘CHAR_BIT’ не описан (первое использование в этой функции)
OpenBSD_malloc_Linux.c:1022: ошибка: (Сообщение о неописанном идентификаторе выдается один раз
OpenBSD_malloc_Linux.c:1022: ошибка: для каждой функции, в которой он используется.)
OpenBSD_malloc_Linux.c: В функции ‘malloc_bytes’:
OpenBSD_malloc_Linux.c:1161: ошибка: ‘CHAR_BIT’ не описан (первое использование в этой функции)
OpenBSD_malloc_Linux.c: В функции ‘irealloc’:
OpenBSD_malloc_Linux.c:1347: ошибка: ‘CHAR_BIT’ не описан (первое использование в этой функции)
OpenBSD_malloc_Linux.c: В функции ‘free_bytes’:
OpenBSD_malloc_Linux.c:1706: ошибка: ‘CHAR_BIT’ не описан (первое использование в этой функции)
OpenBSD_malloc_Linux.c: В функции ‘ispowerof2’:
OpenBSD_malloc_Linux.c:1955: ошибка: ‘CHAR_BIT’ не описан (первое использование в этой функции)

Файлы /usr/include/sys/param.h и /usr/include/limits.h есть, права нормальные на них. GCC 4:4.3.3-1ubuntu1 стоит. Никак не могу понять в чем дело... :(

Аватар пользователя diamon

только что скомилил на машине

только что скомилил на машине с убунтой 9.04 - никаких проблем.
знающие люди посоветовали попробовать ключик -i

Аватар пользователя Angel2S2

Сорри, не туда отписался :(

Сорри, не туда отписался :(

Аватар пользователя Angel2S2

Не компилится... :(

Запускаю "gcc -shared -fPIC -O2 OpenBSD_malloc_Linux.c -o ./malloc.so", а мне в ответ туева куча ошибок... Система Убунта 9.04. В чем дело может быть? Исходники ядра нужны?

Аватар пользователя diamon

у меня на арче скомпилилось

у меня на арче скомпилилось без проблем. никаких исходников нету.
на что хоть ругается?

Отправить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
 
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <table> <tr> <td> <img>
  • Строки и параграфы переносятся автоматически.
  • Вы можете использовать подсветку исходного кода следующими тегами: <code>, <blockcode>. Поддерживаемые стили тегов: <foo>, [foo].
  • Поисковые системы будут индексировать и переходить по ссылкам на разрешённые домены.

Подробнее о форматировании