Положительный/Отрицательный опыт использования STL

User avatar
StressedintheUS
Уже с Приветом
Posts: 664
Joined: 11 Nov 2002 04:29
Location: USA

Положительный/Отрицательный опыт использования STL

Post by StressedintheUS »

Пытаюсь применить STL библиотеки в С++ для автоматизации работы с памятью (чтобы объекты выгружались из памяти автоматом). Пока - страшный геморрой, особенно с массивами объектов, синтакс неприятный, решения отнюдь не тривиальные.

Интересует опыт подобных решений - удалось ли применить STL в больших проектах без особой натуги, переключились ли на собственные классы - менеджеры памяти - или использовали что-либо другое?
Palych
Уже с Приветом
Posts: 13722
Joined: 16 Jan 2001 10:01

Post by Palych »

Можно добавить чайниковский вопрос? (начальство заставляет на C++ писать :( )
Где можно почитать про управлению памятью в больших проектах?
Наши аксакалы отрицают необходимость централизованного memory management mechanism :pain1:
User avatar
lx_uk
Уже с Приветом
Posts: 376
Joined: 04 Feb 2002 10:01

Re: Положительный/Отрицательный опыт использования STL

Post by lx_uk »

StressedintheUS wrote:Пытаюсь применить STL библиотеки в С++ для автоматизации работы с памятью (чтобы объекты выгружались из памяти автоматом). Пока - страшный геморрой, особенно с массивами объектов, синтакс неприятный, решения отнюдь не тривиальные.


Это дело привычки/опыта скорее.

StressedintheUS wrote:Интересует опыт подобных решений - удалось ли применить STL в больших проектах без особой натуги, переключились ли на собственные классы - менеджеры памяти - или использовали что-либо другое?


Использование STL контейнеров обычно дает неплохой результат в плане упорядочивания кода. Впрочем обычно всё контейнерами и ограничивается. Ну плюc еще string, auto_ptr. А вот управление памятью, алгоритмы и всякие другие сложности как правило (IMHO) остаются невостребованными. Используется то что есть по-умолчанию.
User avatar
AndreyT
Уже с Приветом
Posts: 3003
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Re: Положительный/Отрицательный опыт использования STL

Post by AndreyT »

StressedintheUS wrote:Пытаюсь применить STL библиотеки в С++ для автоматизации работы с памятью (чтобы объекты выгружались из памяти автоматом). Пока - страшный геморрой, особенно с массивами объектов, синтакс неприятный, решения отнюдь не тривиальные.


В STL нет специализированных средств, предназначенных для решения таких задач. Поэтому мне не совсем понятно, в чем суть вопроса. Кстати, что имеется в виду, под "выгружением из памяти"?

Интересует опыт подобных решений - удалось ли применить STL в больших проектах без особой натуги, переключились ли на собственные классы - менеджеры памяти - или использовали что-либо другое?
Best regards,
Андрей
Вася Пупкин
Ник закрыт.
Posts: 86
Joined: 04 Feb 2004 06:14

Re: Положительный/Отрицательный опыт использования STL

Post by Вася Пупкин »

AndreyT wrote:Кстати, что имеется в виду, под "выгружением из памяти"?


Сборщика мусора как в жабе человек хочет
User avatar
AndreyT
Уже с Приветом
Posts: 3003
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Re: Положительный/Отрицательный опыт использования STL

Post by AndreyT »

Вася Пупкин wrote:
AndreyT wrote:Кстати, что имеется в виду, под "выгружением из памяти"?


Сборщика мусора как в жабе человек хочет


В том то и дело, что первое, что приходит в голову, когда говорят о "выгружении из памяти" - это своппинг, а не сборка мусора. Хотя и сборка мусора тоже кандидат. Потому и непонятно.
Best regards,
Андрей
Вася Пупкин
Ник закрыт.
Posts: 86
Joined: 04 Feb 2004 06:14

Re: Положительный/Отрицательный опыт использования STL

Post by Вася Пупкин »

AndreyT wrote:
Вася Пупкин wrote:
AndreyT wrote:Кстати, что имеется в виду, под "выгружением из памяти"?


Сборщика мусора как в жабе человек хочет


В том то и дело, что первое, что приходит в голову, когда говорят о "выгружении из памяти" - это своппинг, а не сборка мусора. Хотя и сборка мусора тоже кандидат. Потому и непонятно.


Своппингом обычно ОС занимается.
Vovka
Уже с Приветом
Posts: 1906
Joined: 14 Mar 2001 10:01

Re: Положительный/Отрицательный опыт использования STL

Post by Vovka »

StressedintheUS wrote:Пытаюсь применить STL библиотеки в С++ для автоматизации работы с памятью (чтобы объекты выгружались из памяти автоматом). Пока - страшный геморрой, особенно с массивами объектов, синтакс неприятный, решения отнюдь не тривиальные.

А в чём конкретно проблема? Я вот если честно даже представить не могу, где там "страшный геморрой" может возникнуть при работе с памятью.
Единственно, вам ещё для нормального использования скорее всего понадобятся смарт-поинтеры кроме auto_ptr (его ни в коем случае нельзя хранить в коллекциях!). Например, посмотрите сюда: http://boost.org/libs/smart_ptr/smart_ptr.htm. В коллекции обычно хорошо запихивать shared_ptr из этой библиотеки.

Один совет по поводу STL и её изучения.
Эта библиотека не сложная, она просто неочевидная. Т.е., есть какие-нить библиотеки - вроде коллекций в MFC - посмотрел на нитерфейс класса, вроде как ясно, что он делает. Худо-будно начал использовать.
Другое дело STL. Лучше сначала выделить какое-то время на то, чтобы почитать про неё. Немного, не больше одного или даже половины дня. В онлайне вроде где-то есть статья самого Степанова. Если книжка - то есть книжка "The C++ Standard Library", by Nicolai M. Josuttis. Но её даже всю читать не надо, она толстая. MSDN насчёт STL лучше не смотреть, там написано очень плохо, лучше вот это: http://www.sgi.com/tech/stl/table_of_contents.html. Там, правда, несколько нестандартных расширений описано, но есть соотв. пометки. Ну и неплохо почитать Meyers, "Effective STL".

StressedintheUS wrote: Интересует опыт подобных решений - удалось ли применить STL в больших проектах без особой натуги, переключились ли на собственные классы - менеджеры памяти - или использовали что-либо другое?

Удавалось и удаётся. И в больших, и в маленьких тоже.
Мне вот наоборот, после STL любая библиотека контейнеров неуклюжей кажется.
Vovka
Уже с Приветом
Posts: 1906
Joined: 14 Mar 2001 10:01

Re: Положительный/Отрицательный опыт использования STL

Post by Vovka »

Вася Пупкин wrote:
AndreyT wrote:Кстати, что имеется в виду, под "выгружением из памяти"?

Сборщика мусора как в жабе человек хочет


Кстати, зачем? Т.е. это не риторический вопрос, действительно интересно.
В жабе как я понимаю детерминированных деструкторов нету, соответственно и смартпоинтеров. Поэтому им пришлось исхитряться и изобретать GC. А в каких случаях он для C++ нужен, я пока не могу представить.
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Re: Положительный/Отрицательный опыт использования STL

Post by A. Fig Lee »

Vovka wrote:
Вася Пупкин wrote:
AndreyT wrote:Кстати, что имеется в виду, под "выгружением из памяти"?

Сборщика мусора как в жабе человек хочет


Кстати, зачем? Т.е. это не риторический вопрос, действительно интересно.
В жабе как я понимаю детерминированных деструкторов нету, соответственно и смартпоинтеров. Поэтому им пришлось исхитряться и изобретать GC. А в каких случаях он для C++ нужен, я пока не могу представить.


Ну если хочется реиспользовать обьекты - какой смысл их создавать и уничтожать?
Можно иметь пул обьектов с автосайзом и удалять в конце.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
AndreyT
Уже с Приветом
Posts: 3003
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Re: Положительный/Отрицательный опыт использования STL

Post by AndreyT »

Вася Пупкин wrote:
AndreyT wrote:
Вася Пупкин wrote:
AndreyT wrote:Кстати, что имеется в виду, под "выгружением из памяти"?


Сборщика мусора как в жабе человек хочет


В том то и дело, что первое, что приходит в голову, когда говорят о "выгружении из памяти" - это своппинг, а не сборка мусора. Хотя и сборка мусора тоже кандидат. Потому и непонятно.


Своппингом обычно ОС занимается.


Обычно - ОС. Необычно - не ОС. Кто ж знает, что человеку нужно.

Своппинг в Win32, например, никак не помогает в ситуациях, когда задаче недостаточно адресного простанства процесса. Т.е. мало 2Гб и все тут. В такой ситуации спасает только самописный своппинг.
Best regards,
Андрей
potapych
Уже с Приветом
Posts: 1360
Joined: 02 Mar 2002 10:01

Re: Положительный/Отрицательный опыт использования STL

Post by potapych »

AndreyT wrote:Своппинг в Win32, например, никак не помогает в ситуациях, когда задаче недостаточно адресного простанства процесса. Т.е. мало 2Гб и все тут. В такой ситуации спасает только самописный своппинг.

( стало интересно ) А что за задачи такие, где 2ГБ памяти может не хватить?
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Или AWE. Или переход на 64bit.
А базам данных памяти всегда мало
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
Vovka
Уже с Приветом
Posts: 1906
Joined: 14 Mar 2001 10:01

Re: Положительный/Отрицательный опыт использования STL

Post by Vovka »

A. Fig Lee wrote: Ну если хочется реиспользовать обьекты - какой смысл их создавать и уничтожать?
Можно иметь пул обьектов с автосайзом и удалять в конце.

Ну а при чём тут GC? Сами явно программируйте время жизни, и всё тут.
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Re: Положительный/Отрицательный опыт использования STL

Post by A. Fig Lee »

Vovka wrote:
A. Fig Lee wrote: Ну если хочется реиспользовать обьекты - какой смысл их создавать и уничтожать?
Можно иметь пул обьектов с автосайзом и удалять в конце.

Ну а при чём тут GC? Сами явно программируйте время жизни, и всё тут.

1. Как программировать время хизни?
2. А какая разница с GC?
3. Дык вроде вопрос был зачем кастом менеджмент меморы, предположили - нужен гарбейдж коллектор. Зачем он должен быть точной копией жавовского?
Верить нельзя никому - даже себе. Мне - можно!

Return to “Вопросы и новости IT”