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

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

Поделиться
Advanced: Тема повышенной сложности или важная.
Страницы: 1 2 37 8 Следующая »
ДемонПостоялецwww4 дек. 20170:52#0
В свободное время накидал вариант менеджера работы с памятью, хотелось бы услышать комментариев по этому поводу
Идея пришла после того как "устал" использовать new delete, следить за всем и всеми силами ограничивать пользователя
Так же добавление потокобезопасности
+ Показать

PS код прототип

ArchiDevilПостоялецwww4 дек. 20171:08#1
std::shared_ptr
innuendoПостоялецwww4 дек. 20171:20#2
Демон
> Идея пришла после того как "устал" использовать new delete, следить за всем и
> всеми силами ограничивать пользователя

нужно грамотно писать каод

SuslikМодераторwww4 дек. 201713:38#3
вооу, кажется, у нас победитель среди велосипедистов
ДемонПостоялецwww4 дек. 201713:59#4
ArchiDevil
> std::shared_ptr
Тут скорее count и mt упаковал туда

Suslik
Награду в студию


innuendo
Скажем так это никому не нужный движок DX9,11, OpenGL, кросплатформенный, но вдруг это куму-то понадобиться то стараюсь избавить последователя от возможных ошибок методом ограничения доступа. Но при этом Опенсорс


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

Правка: 4 дек. 2017 14:04

SuslikМодераторwww4 дек. 201714:02#5
Демон
> Велосипед это то что нужно, зато свой и полностью предсказуемый.
я понимаю, что свой предсказуемый код с текущей памятью вокруг тормозного мьютекса всегда лучше скучного std::shared_ptr<>, но чем именно он, простите, не предсказуемый?
ДемонПостоялецwww4 дек. 201714:06#6
Suslik
Практически все что написано тут не устраивает https://habrahabr.ru/post/191018/
ДемонПостоялецwww4 дек. 201714:08#7
Гораздо проще же сделать допустим так:
class cSprite {
};
typedef cPtr<cSprite> pSprite;


main() {
pSprite bg;
bg->load();
engine->Add(bg);

...

bg->visible(false);
}

Правка: 4 дек. 2017 14:09

SuslikМодераторwww4 дек. 201714:14#8
Демон
> Практически все что написано тут не устраивает
> https://habrahabr.ru/post/191018/
ну ты же понимаешь, что все проблемы shared_ptr либо относятся к твоему велику на 100%, либо не относятся, потому что он чего-то просто не умеет?

Демон
> pSprite bg;
> bg->load();
> engine->Add(bg);
лол, зачем в этом случае вообще указатель, если память всё равно выделяется при создании и удаляется при выходе из скоупа? это как бы — самый типичный случай для переменной на стеке. но даже если очень сильно хочется, то, разумеется, код с shared_ptr будет практически идентичным за исключением явного создания объкта, а не неявного чёрт-знает-чего. вот только почему для тебя это не является очевидным? ещё вопрос — что именно в теме повышенной важности или сложности?

Правка: 4 дек. 2017 14:16

ДемонПостоялецwww4 дек. 201714:18#9
Suslik
> лол, зачем в этом случае вообще указатель, если память всё равно выделяется при
> создании и удаляется при выходе из скоупа? это как бы — самый типичный случай
> для переменной на стеке. но даже если очень сильно хочется, то, разумеется, код
> с shared_ptr будет практически идентичным за исключением явного создания
> объкта, а не неявного чёрт-знает-чего. вот только почему для тебя это не
> является очевидным?
Присмотрись к коду, при создании выделяется динамическая память, объект разрушается при выходе из функции но при этом выделенная память осталась жива так как был конструктор копирования и объект живет в самом движке, все делается скрыто от пользователя
ДемонПостоялецwww4 дек. 201714:21#10
Скажем такой случай:
void callback() {
   cSprite *bg = Engine->Get("bg");
   delete bg;
   //При этом в движке в другом потоке обновления\физики\рендера\сети и т. д. мы благополучно вылетаем
}

ДемонПостоялецwww4 дек. 201714:24#11
Код писал еще на С++98, поэтому нет в нем shared_ptr, занялся небольшим рефакторингом
innuendoПостоялецwww4 дек. 201714:30#12
познай конзольный стайл
nesПостоялецwww4 дек. 201714:35#13
хендлы уже предлагали?
СтасПостоялецwww4 дек. 201714:35#14
Весь этот код это "Инструкция как делать дедлоки". И плюс еще утечка памяти.

Правка: 4 дек. 2017 14:36

Страницы: 1 2 37 8 Следующая »

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

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

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