1.11, Аноним (11), 08:51, 17/05/2021 [ответить] [﹢﹢﹢] [ · · · ] [↓] [↑] [п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б■╢Б■╛ п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б■╢Б∙■п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б√└Б∙▒п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б┬ Б▄═п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■я▐Б√░п▒Б┬ Б√⌠я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■я▐Б■°п▒Б┬≥Б∙■я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б■╛б═п▒Б√═Б√═п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б√└Б∙▒я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√⌠]
| –1 +/– |
>но происходит почти полное освобождение через некоторое время, если запустить Telegram Desktop с аллокатором jemalloc из FreeBSD
Firefox использует jemalloc, однако на Винде не текёт (вернее память жрёт, но не крешится), а на Линуксе текёт (жрёт память, при этом ещё и крешится). Вообще на Линуксе программы почему-то крешатся по памяти. Видимо СПО - говно:
>современные аллокаторы сложны
... и требуют инвестиций в разработку и отладку, которые по карману только крупным корпорациями вроде Microsoft и Apple, которые своими know how бесплатно не поделятся.
| |
1.17, timur.davletshin (ok), 08:38, 21/05/2021 [ответить] [﹢﹢﹢] [ · · · ] [↓] [↑] [п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б■╢Б■╛ п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б■╢Б∙■п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б√└Б∙▒п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б┬ Б▄═п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■я▐Б√░п▒Б┬ Б√⌠я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■я▐Б■°п▒Б┬≥Б∙■я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б■╛б═п▒Б√═Б√═п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б√└Б∙▒я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√⌠]
| +/– |
Всё бы классно, но jemalloc на холодном старте заметно более прожорлив, чем умолчальный аллокатор в относительно новых версиях glibc (имя ему pmalloc2, если память не врёт). Раньше был смысл в таких телодвижениях, т.к. jemalloc был более производителен на SMP, но сейчас разница производительности нивелирована (с 2.26 версии). Лично у меня на разница в потреблении памяти на Debian 10 достигает 40-50% не в пользу jemalloc на холодном старте, но через какое-то время падает, но тоже не в пользу jemalloc. Увы.
| |
|
|
3.46, pavlinux (ok), 22:17, 10/06/2021 [^] [^^] [^^^] [ответить] [п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б■╢Б■╛ п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б■╢Б∙■п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б√└Б∙▒п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б┬ Б▄═п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■я▐Б√░п▒Б┬ Б√⌠я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■я▐Б■°п▒Б┬≥Б∙■я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б■╛б═п▒Б√═Б√═п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б√└Б∙▒я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√⌠]
| –1 +/– |
> Скорее всего фрагментация.
> Делаем несколько мелких аллокаций подряд, занимаем непрерывный кусок в куче malloc().
> Потом делаем free() на все аллокации, кроме последней. Реализация malloc/free в glibc
> не вызовет munmap(), если последний чанк помечен как non-free.
Спецом от anonymous пишите, чтоб не позориться от этого бреда?
Какая пля куча malloc? :рукалицо:
Сколько malloc(), столько же и free(), нет никакой кучи malloc
> Это несмотря на то, что уже освобожденные куски оставляют неиспользованными целые страницы,
> на которые можно вызвать munmap().
Чo? освобожденные и неиспользованные это одно и тоже, unmap на них приведет к double free;
Хватить пиз....олить, тиоретеги... Где отладка с valgring, duma, mtrace, tcmalloc, heaptrack,...
| |
|
|
|
|
3.53, anonymous (??), 14:50, 14/06/2021 [^] [^^] [^^^] [ответить] [п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б■╢Б■╛ п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б■╢Б∙■п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б√└Б∙▒п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б┬ Б▄═п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■я▐Б√░п▒Б┬ Б√⌠я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■я▐Б■°п▒Б┬≥Б∙■я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б■╛б═п▒Б√═Б√═п©б╘п╠Б∙≤п©Б∙═п▒Б┬≥Б┴╓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б√═Б∙⌡п▒Б■╢Б∙■п©Б√▓п▒Б■╛Б┴╔п▒Б√└Б∙▒я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√▓п©б╘п▒Б┬ Б√⌠п©Б√▓п▒Б■╛б═п▒Б┬≥Б√▒п©Б√▓п▒Б■╛б═п▒Б┬ Б√⌠]
| +/– |
> А если то же самое, но с MALLOC_MMAP_THRESHOLD_=128?
Будет на любую аллокацию > 128B делать mmap() новой страницы, оверхед в (размер страницы / 128) раз. RSS распухнет в десятки раз, но после free() память будет возвращаться через munmap().
Есть аллокаторы (например, openbsd malloc), в которых для аллокаций данного размера создаются отдельные кучи через mmap(), и при вызове free() на все аллокации, размещенные в данной странице, немедленно вызывается munmap().
| |
|
|
|