170 похожих чатов

Всем привет. Почему на плюсах так распространено писать кастомные аллокаторы

в библиотеках? Из-за того что стандартный аллокатор медленный? Или это как-то с STL связано

10 ответов

21 просмотр

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

Stranger- Автор вопроса
Anton Semenov
стандартный аллокатор универсальный, прилично рабо...

Может, дело еще в том, что кастомный аллокатор может работать как арена аллокатор и не делать системные вызовы каждый раз?

Stranger
Может, дело еще в том, что кастомный аллокатор мож...

начиная с C++17 в стандартной библиотеке появились полиморфные аллокаторы, где есть стандартная арена - std::pmr::monotonic_buffer_resource а раньше да, приходилось городить велосипеды

Stranger- Автор вопроса
Anton Semenov
начиная с C++17 в стандартной библиотеке появились...

Понял, спасибо. И еще вопрос: вот я пишу библиотеку (конкретно - ecs фреймворк для геймдева) на плюсах, стоит ли мне избегать использования сырых указателей как внутри, так и в api для пользователя, работать только с умными указателями? Я понимаю, что семантика умных указателей - это семантика владения, но все же я хочу понять, насколько принято в современном сообществе использование сырых указателей.

Stranger
Понял, спасибо. И еще вопрос: вот я пишу библиотек...

невладеющие указатели совершенно незазорно выставлять в API, но в современном коде действительно важно чтобы владеющие имели какой-то свой тип - обычно это как раз-таки unique_ptr, и в довольно редких - shared

Stranger- Автор вопроса
Anton Semenov
невладеющие указатели совершенно незазорно выставл...

Понял. Спасибо большое. weak_ptr не используют?

Stranger
Понял. Спасибо большое. weak_ptr не используют?

weak_ptr это по сути ослабление shared_ptr, можно создать только из него и он убирает счетчик ссылок

Stranger
Понял. Спасибо большое. weak_ptr не используют?

используют, конечно, как же иначе избегать циклов =) но вообще с shared_ptr лучше быть осторожным. Это хорошо спроектированная и работающая штука, но в большинстве случаев в хорошо спроектированной программе владелец объекта всегда один, то есть по сути shared нужны нечасто. А если их использовать активно - они имеют неприятное свойство расползаться по всему коду, так что потом фиг поймешь где объект должен удалиться, что не есть хорошо для отладки. Плюс это дополнительный оверхед на работу атомарного счетчика.

Stranger
Понял. Спасибо большое!)

я тут во многом пересказал то, что написано в core guidelines, если еще не читали - рекомендуем =)

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
3
Карта сайта