Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> локальный сборщик мусора 
:(
    Опции темы
Леопольд
Дата 1.7.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(Lazin @ 1.7.2009,  13:38)
кстати, стоит отметить, что сабж - вовсе не сборщик мусора smile

Пожалуй да. Но как то его обозвать надо было. Вот я и обозвал, что первое в голову пришло... smile
Пока не думал как можно было-бы заюзать его с пулом, некогда было. Возможно, для этого придётся что-нибудь изменить.
Однако если пул singleton, тогда можно будет написать политику удаления и так.

Добавлено @ 17:53
Цитата(Lazin @ 1.7.2009,  12:58)
Цитата(mes @  1.7.2009,  12:07 Найти цитируемый пост)
Объекту не желательно знать о способе своего создания и хранения. Для этого есть врапперы (такие как умные указатели) которые задают нужную политику.


Цитата(Lazin @  1.7.2009,  08:42 Найти цитируемый пост)
лучше использовать какой-нибудь смарт поинтер вместо обычного указателя, что-бы можно было определить на этапе компиляции, как удалять объект


я именно об этом и говорил

А я имел ввиду совсем другое.
Какие выгоды от того что способ выделения памяти напрямую зависит от типа? Чем плохо выделять int и при помощи new, и при помощи malloc? Или пользовательский тип? Может мне надо использовать специфический тип, для которого я не хочу вызывать конструктор и деструктор, например.

Это сообщение отредактировал(а) Леопольд - 1.7.2009, 17:58


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Леопольд
Дата 1.7.2009, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(mes @ 1.7.2009,  10:07)
Леопольд, но все же зачем
Цитата(mes @  1.7.2009,  00:32 Найти цитируемый пост)
нужен такой контейнер, да еще и локальный?
не проще ли было бы просто пользoвать обертку для каждого объекта отдельно ?

тоесть вместо garbage_container ипользовать garbage_object.

Я убрал вчера контейнер и сделал из объектов стек. Каждый объект удаляет предыдущий. Получается на один указатель больше чем без него, потому что надо хранить указатель на последний добавленный объект. Плюс ещё указатели на память. Недостаток в виртуальном деструкторе. Я вчера прогнал через профайлер. Больше всего времени уходит на вызов виртуального деструктора.
Вообще, можно ускорить процесс, если сделать отдельный pool для указателей а не выделять для каждого указателя новый кусочек каждый раз.
Но мне не хочется, потому что эта штука мне уже не нравится smile

Добавлено @ 18:12
Цитата(Lazin @ 1.7.2009,  10:19)
Цитата(mes @  1.7.2009,  10:07 Найти цитируемый пост)
операция удаления "выбрана" рядом с операцией создания.

никто не мешает мне передать в метод push что угодно smile 

И ничего удивительного. Даже константность можно снять приведением типов. Это С++.
Код

Foo* ptr = (Foo*)malloc(sizeof(Foo));
boost::shared_ptr<Foo>(ptr);

Даже если привязать способ очистки памяти к типу объекта при помощи traits, то что сможет помешать выделить память иначе для этого же объекта? Например, при помощи malloc... Тут уже всё зависит от программиста.

Но можно привязать способ очистки к способу выделения памяти а не к типу объекта. Я полагаю, mes, имел ввиду именно это.

Это сообщение отредактировал(а) Леопольд - 1.7.2009, 21:10


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
mes
Дата 1.7.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Леопольд @  1.7.2009,  17:06 Найти цитируемый пост)
Я убрал вчера контейнер и сделал из объектов стек. Каждый объект удаляет предыдущий.

Позвольте узнать зачем ? а также хотелось бы услышать какую задачу должен решать Ваш компонент ? (а то обсуждаем зверя о сути которого нам практически ничего неизвестно smile )

Цитата(Леопольд @  1.7.2009,  17:06 Найти цитируемый пост)
Больше всего времени уходит на вызов виртуального деструктора.

А зачем Вам вообще обязательный виртуальный деструктор ? 

Цитата(Леопольд @  1.7.2009,  17:06 Найти цитируемый пост)
Цитата(Леопольд @  1.7.2009,  17:06 Найти цитируемый пост)
никто не мешает мне передать в метод push что угодно smile 

И ничего удивительного. Даже константность можно снять приведением типов. Это С++.

А не объясните ли, как Ваше сравнение вяжется с контекстом замечания ?! 

Цитата(Леопольд @  1.7.2009,  17:06 Найти цитируемый пост)
Но можно привязать способ очистки к способу выделения памяти, а не к типу объекта.Я полагаю, mes, имел ввиду именно это.

 smile



Это сообщение отредактировал(а) mes - 1.7.2009, 20:20


--------------------
PM MAIL WWW   Вверх
Леопольд
Дата 1.7.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(mes @ 1.7.2009,  20:20)
Цитата(Леопольд @  1.7.2009,  17:06 Найти цитируемый пост)
Я убрал вчера контейнер и сделал из объектов стек. Каждый объект удаляет предыдущий.

Позвольте узнать зачем ? а также хотелось бы услышать какую задачу должен решать Ваш компонент ? (а то обсуждаем зверя о сути которого нам практически ничего неизвестно smile )

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

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

Добавлено @ 20:31
Цитата(mes @ 1.7.2009,  20:20)
Цитата(Леопольд @  1.7.2009,  17:06 Найти цитируемый пост)
Цитата(Леопольд @  1.7.2009,  17:06 Найти цитируемый пост)
никто не мешает мне передать в метод push что угодно smile 

И ничего удивительного. Даже константность можно снять приведением типов. Это С++.

А не объясните ли, как Ваше сравнение вяжется с контекстом замечания ?!

Именно с контекстом, никак. Но смысл есть... smile Всегда можно сделать не так как предназначено.

Это сообщение отредактировал(а) Леопольд - 1.7.2009, 20:33


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
mes
Дата 2.7.2009, 00:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Леопольд @  1.7.2009,  19:29 Найти цитируемый пост)
Именно с контекстом, никак. Но смысл есть... smile Всегда можно сделать не так как предназначено.

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

разницу надеюсь почувствовали smile

Цитата(Леопольд @  1.7.2009,  19:29 Найти цитируемый пост)

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

прежде всего сформулируйте, пожалуйста, для чего в Вашем случае необходимо хранить объекты как коллекцию  ?



--------------------
PM MAIL WWW   Вверх
DrHex
Дата 2.7.2009, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



Цитата

прежде всего сформулируйте, пожалуйста, для чего в Вашем случае необходимо хранить объекты как коллекцию  ?


Поддержую.....

Для сборки мусора, а точнее освобождению освобождения линамической памяти можно, используются smart-poiner, а фантаций в их реализации куча. Можно есче конечно написать аллокатор, и использовать как для выделения памяти так и для освобождения. Но выделять память, а потом добовлять указатели на эту память в контейнер что бы потом удалить, это нонсанс!!!
 



--------------------
google.com и это все.
PM MAIL   Вверх
Lazin
Дата 2.7.2009, 05:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Леопольд @  1.7.2009,  18:06 Найти цитируемый пост)
Но можно привязать способ очистки к способу выделения памяти а не к типу объекта
вывод конечно гениальный, но по моему это и так очевидно, и все с этим согласны.. smile

Цитата(Леопольд @  1.7.2009,  18:06 Найти цитируемый пост)
И ничего удивительного. Даже константность можно снять приведением типов. Это С++

когда речь идет о интерфейсе класса, то желательно, что-бы он был сделан так, что-бы не допустить возможность неправильного использования smile 
PM MAIL Skype GTalk   Вверх
Леопольд
Дата 2.7.2009, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Всем спасибо! Противопоставить нечего, потому что сам думаю так же...


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0730 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.