LINUX.ORG.RU

Когда нужен свой аллокатор в C++?

 ,


0

1

// Тема переименована из «Почему в C++ каждый проект пишет свой аллокатор?»

Многие такие кастомные аллокаторы демонстрировали графики, которые показывали, как эти аллокаторы обходят по скорости другие аллокаторы. Но почему тогда не сделали какой-нибудь стандартизированный быстрый аллокатор? Или каждому проекту прям нужен свой собственный?



Последнее исправление: Original_1 (всего исправлений: 1)
Ответ на: комментарий от Dark_SavanT

Вот-вот. Дофига вариантов.

Еще мы забыли ядерные структуры. Тоже куда-то в пространство процесса мапятся. И, по-моему, как раз куда-то наверх, выше начала стека.

hibou ★★★★★
()

Многие такие кастомные аллокаторы демонстрировали графики, которые показывали, как эти аллокаторы обходят по скорости другие аллокаторы.

Любой подобный график соответствует определенному сценарию использования. У любого универсального аллокатора есть сценарии, под которые он заточен, и паталогические случаи, в которых он неэффективен.

Но аллокатор может и не быть универсальным. Например, если в приложении часто создаваются и удаляются объекты определенного типа, то можно сделать аллокатор специально для них. Так как все аллокации одного размера, такой аллокатор будет очень простым (и, как следствие, более быстрым, чем универсальные), и будет лучше предотвращать фрагментацию памяти.

Кроме того, универсальные аллокаторы поддерживают многопоточное использование. Кастомный аллокатор может быть однопоточным и выиграть в скорости за счет этого.

annulen ★★★★★
()
Ответ на: комментарий от Lrrr

jemalloc например много кто пользуется

# pactree -rd1 jemalloc
jemalloc
└─telegram-desktop

UPD.

когда Firefox перешёл на jemalloc

А, ну т.е. остальные его статически линкуют.

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 1)
Ответ на: комментарий от dimgel

А, ну т.е. остальные его статически линкуют.

Грепни свои бинарники по malloc_usable_size, если есть, значит в бинарнике используется jemalloc (слинкован статически или динамически)

annulen ★★★★★
()

Что значит свой аллокатор? Обычно всё сводится к 3 типам аллокаторов: malloc, arena, slab (gc в расчёт не берём). Первый мало кто способен свелосипедить за разумное время, поэтому выбирают между реализациями glibc, jemalloc, tcmalloc. Последние же настолько простые, что проще велосипедить.

snizovtsev ★★★★★
()
Последнее исправление: snizovtsev (всего исправлений: 1)