LINUX.ORG.RU

Реквест книг, примеров по работе с памятью, современному стилю C++

 


1

4

Решил сделать чудо игровой-движок на С++, посмотрел как с Memory Management обстоит дело - завезли подсчет ссылок shared_ptr и подобное, лямбды и пр. Попробовал сам добавить map с shared_ptr, как минимум код получился не читаемым. Ребята, подскажите пожалуйста примеры и книги для современного C++.



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

игровой-движок
подсчет ссылок

«you're doing it wrong» (c)

Для игр используют свои аллокаторы, пулы и тд.

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

Насколько я помню, он использует атомарный счётчик ссылок - о какой производительности может идти речь?

Ну и свой аллокатор может сам заботится о памяти, которую сломает shared_ptr.

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

Насколько я помню, он использует атомарный счётчик ссылок

...которые меняются при создании/уничтожении копий

- о какой производительности может идти речь?

О высокой.

Ну и свой аллокатор может сам заботится о памяти, которую сломает shared_ptr.

Аллокатор - не может. Сборщик мусора - может, но это не аллокатор. Так что вопрос в силе - чем свои аллокаторы и пулы противоречат shred_ptr?

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

На ObjC везде подсчет ссылок - вроде производительности не сильно мешает. Но я скажу что производительность движка для меня лично не главное, главное проникнуться сутью нового c++, читаемость кода.

orkshaman
() автор топика
Ответ на: комментарий от tailgunner

...которые меняются при создании/уничтожении копий

Не распарсил.

О высокой.

По сравнению с чем? Использования обычных RC, или не использование их вообще будет еще быстрее.

Аллокатор - не может.

Почему это? Берём первый попавшийся C++ Memory Pool Allocator и видим, что он сам освобождает память при выходе из области видимости.

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

Не распарсил.

Бывает.

Использования обычных RC, или не использование их вообще будет еще быстрее.

Конечно. На перенебрежимо малую долю общей производительности.

Берём первый попавшийся C++ Memory Pool Allocator и видим, что он сам освобождает память при выходе из области видимости.

shared_ptr может ссылаться и на такой объект, и даже проверять корректность использования пула в deleter.

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

shred_ptr

Хорошее название для умного указателя, который при удалении затирает память объекта.

пулы

За термином «пул» стоят как минимум два разных понятия. Один из тех дурацких терминов, постоянно вызывающих недопонимания.

i-rinat ★★★★★
()
Ответ на: комментарий от tailgunner

На перенебрежимо малую долю общей производительности.

Банальный бенчмарк запросто даст двухкратный прирост. Но тут можно развести демагогию о том, что просто нужно по ссылке передавать, чтобы часто не вызывать конструктор копирования shared_ptr. Но это не делает ARC (который atomic) быстрым. Под быстрым я подразумеваю простой int.

shared_ptr может ссылаться и на такой объект, и даже проверять корректность использования пула в deleter.

Но смысл от наворотов shared_ptr, если аллокатор уже всё делает? Только лишние расходы.

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

Банальный бенчмарк запросто даст двухкратный прирост

Поэтому я сказал об общей производительности программы.

Но смысл от наворотов shared_ptr, если аллокатор уже всё делает?

Проверка корректности использования пула.

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

Так что вопрос в силе - чем свои аллокаторы и пулы противоречат shred_ptr?

Какой смысл считать ссылки на память в пуле? Создал пул, нарожал объектов, поигрался и снёс всё к чертовой матери — в этом вся философия же.

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

Банальный бенчмарк запросто даст двухкратный прирост.

Очевидно, что любое нормальное приложение не состоит из бесконечного цикла, делающего только new и delete. А обычно между new и delete ещё и огромный объём работы. Соответственно, есть мнение, что затраты на выделение/освобождение памяти не являются основными для игрового движка. А если являются, то что-то в архитектуре приложения не так (надо использовать пулы и подобные вещи).

KivApple ★★★★★
()
Ответ на: комментарий от shkolnick-kun

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

anonymous
()
26 ноября 2016 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.