Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / [C++] Управление памятью (4 стр)

[C++] Управление памятью (4 стр)

Поделиться
Advanced: Тема повышенной сложности или важная.
Страницы: 13 4 5 68 Следующая »
ДемонПостоялецwww5 дек. 201710:28#45
Совсем ушли от темы) Достаточно небольшого теста чтобы остаться верным чистым указателям:
+ Показать

Результат работы:

+ Показать

СтасПостоялецwww5 дек. 201710:46#46
О господи... это не тест, это ересь какая-то. Ты сравниваешь различные вещи. Ну добавь в свой тест unique_ptr результат будет как у обычного поинтера. Во вторых твой тест скорее всего тестировался в дебаг режиме потому как в релизе твой тест скорее всего покажет полную хрень. Shared_ptr имеет совершенно определенную цель. Это не замена обычных указателей а только дополнение. Там где нужно
SuslikМодераторwww5 дек. 201710:46#47
Демон
открой для себя unique_ptr уже.
СтасПостоялецwww5 дек. 201711:21#48
Ты плаваешь в понимании зачем все это нужно. Я и без тестов скажу что выделение памяти + интерлоки + дополнительные проверки, будут медленнее чем обычный указатель. НО! Все это только на этапе инициализации указателя. Доступ к указателю абсолютно идентичен обычному указателю. Но опять же дело не в этом. Не нужно пытаться затыкать дыры в своей программе, используя shared_ptr. Если в твоей программе каждый поинтер нужно заварачивать в shared_ptr значит у тебя криво написанный код.
ДемонПостоялецwww5 дек. 201711:25#49
Suslik
> unique_ptr
Владение в 1 месте, вообще другая тема
SuslikМодераторwww5 дек. 201711:27#50
Демон
> Владение в 1 месте, вообще другая тема
у raw pointer'ов вообще владельцев нет и ничего, они тебя как-то устраивают. хотя по производительности будет 100% аналогично.
ДемонПостоялецwww5 дек. 201711:29#51
Да новые стандарты плохо знаю, упустил момент. Необходимо решение позволяющее:

1) Владеть на равных объектом в нескольких местах одновременно, включая перекрестные ссылки
2) Передача прав управления объектом со всех мест сразу
3) Полное удаление объекта с множества мест одновременно
4) Производительность

SuslikМодераторwww5 дек. 201711:37#52
Демон
> Необходимо решение позволяющее:
тебе необходимо научиться хотеть правильные вещи. если гипотетически допустить, что ты найдёшь то, что ты считаешь, тебе нужно, это будет работать фигово (небезопасно, неэффективно, нерасширяемо). так что почитай, что люди пишут, подумай, почему тебе хочется другого и почему они на самом деле не такие дураки.
СтасПостоялецwww5 дек. 201711:37#53
Демон
> 1) Владеть на равных объектом в нескольких местах одновременно, включая
> перекрестные ссылки

Задай себе вопрос, зачем? Что тебе даст перекрестное владение? В большинстве случаев объект должен иметь одно место где он создается и удаляется. Иначе это приглашение к проблемам.

> 2) Передача прав управления объектом со всех мест сразу
Ну и передавай указатель, зачем размывать по коду место где ты удаляешь объект?

>3) Полное удаление объекта с множества мест одновременно
Что со всех сразу?

>4) Производительность
Использование shared_ptr не влияет на производительность, если ими пользоваться правильно и только там где это действительно нужно

ZabПостоялецwww5 дек. 201711:53#54
Демон
Ты чисто по языку хрень полную написал. Так нельзя писать классы, если не хочешь все уронить. Безотносительно к полезности задумки. Реализация вредительская.
Открой, наконец, книжку по С++ и прочитай ее.
ДемонПостоялецwww5 дек. 201712:11#55
Zab
Свалите троли, нет знаний, нефиг советовать

C++ позволяет стрелять в ногу если мне это захочется)
Пожалуй опишу приблизительно архитектуру движка чтобы было понятно для чего это:

Возьмем допустим спрайт, есть класс cSprite. Движок позволяет не беспокоиться о работе спрайта, добавление его в рендер методом указания файла настроек со всеми необходимыми параметрами.

Итого:
данный спрайт лежит в общем дереве для быстрого поиска (доступу), дерево сортируется поэтому доступ по ID довольно быстрый
необходимые параметры лежат в октри с ссылкой на родителя
Так же имеется дерево объектов (сцены, слои) где есть ссылка на объект
Пользователь может запросить ссылку на объект

Количество потоков динамическое от 1 до 8

На чистых указателях все хорошо работает но есть лишний код по отслеживанию необходимости удаления

FuntikПостоялецwww5 дек. 201712:13#56
Демон
И так синтетический тест:
+ Показать

Что мы видим, юник практически не имеет накладных расходов!!!

Правка: 5 дек. 2017 12:19

СтасПостоялецwww5 дек. 201712:20#57
Демон
> На чистых указателях все хорошо работает но есть лишний код по отслеживанию
> необходимости удаления

Охренеть... такой большой а веришь в чудеса... ты правда думаешь что использование shared_ptr или любого другого похожего механизма, сделает так что "лишний код по отслеживанию необходимости удаления" куда то исчезнет?
Он станет не явным, но ни куда не денется.

Во вторых... при доступе к объекту из кучи разных потоков, объект нужно удалять только в одном, и желательно ДО или ПОСЛЕ того как все потоки отработали, иначе там хватает граблей ....

ДемонПостоялецwww5 дек. 201712:26#58
Стас
> Во вторых... при доступе к объекту из кучи разных потоков, объект нужно удалять
> только в одном, и желательно ДО или ПОСЛЕ того как все потоки отработали, иначе
> там хватает граблей ....
Потоки динамически на старте, но во время работы уже не меняются, сейчас грубо говоря флаг в объекте который говорит что надо удаляться, после чего во всех местах где попадает объект идет локальное удаление и отчет о нем, в конечном итоге с основной кучи удаляется объект и чиститься память

Но есть шанс что пользователь взял и запихал в глобал шару(

Правка: 5 дек. 2017 12:28

TruthfinderПостоялецwww5 дек. 201712:54#59
Демон
> Потоки динамически на старте, но во время работы уже не меняются, сейчас грубо
> говоря флаг в объекте который говорит что надо удаляться, после чего во всех
> местах где попадает объект идет локальное удаление и отчет о нем, в конечном
> итоге с основной кучи удаляется объект и чиститься память

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

Страницы: 13 4 5 68 Следующая »

/ Форум / Программирование игр / Общее

Тема закрыта.

2001—2017 © GameDev.ru — Разработка игр