Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/50: Рейтинг темы: голосов - 50, средняя оценка - 4.52
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1

Сборщик мусора

01.12.2019, 19:38. Показов 9908. Ответов 54
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Наткнулся на такие строки и прошу пояснить, что значит.

Во многих языках управление ресурсами в основном делегируется сбор­
щику мусора. С++ также предлагает интерфейс сборки мусора, так что вы
можете подключить сборщик мусора.

In many languages, resource management is primarily delegated to a garbage collector. C++
also offers a garbage collection interface so that you can plug in a garbage collector

На чем основывается этот интерфейс? И как его подключить. (это про сторонние библиотеки что ли?)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.12.2019, 19:38
Ответы с готовыми решениями:

Сборщик мусора
Доброго вам времени суток! У меня вопрос можно ли автоматизировать удаление объектов размещаемых в куче? (Желательно обойтись только STL).

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

Сборщик системной информации в Windows 8.1
люди, помогите написать программу которая будет работать под windows 8.1 и выводить информацию о процессоре, памяти и.т.д. Что вообще...

54
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
01.12.2019, 23:32
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что у unique_ptr другая задача и другое устройство.
Но можно прикрутить самостоятельно.
Можно, если положить в std::unique_ptr<Parent> объект std::function, пинающий std::allocator<Child>::deallocate с нужным Child* в аргументах. Но это опять же серьезные накладные расходы.

Я вообще говоря ожидал что вместо этого полиморфный объект будет хранить виртуальный метод getMyAddress, через который и будет вытягиваться нужный аллокатору адрес Child*. А сам аллокатор будет не привязан к конкретному типу, а работать как обертка над malloc. Ну, второй пункт в polymorphic_allocator и правда сделали. А вот с первым затык.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.12.2019, 23:46
_stanislav, GC -шные библиотеки "одевают" всё. Начинается от new и заканчивается одетыми указателями. Это аналоги смартпойнтеров. Напиши свою реализацию упрощённо и поймёшь. Вот ссыль (я смотрел по диагонали - вроде похоже на правду).
https://www.codeproject.com/Ar... on-library
Самый главный в С++ вопрос о GC звучит так: - А зачем (зачем - мягко сказано) тогда С++? (имхо). Когда ты напишешь систему поиска нужного объекта для удаления при выходе из области, - одну, вторую, третью, - поймёшь, - лучше на Жаве писать и не мучать ЖоЦэ.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.12.2019, 05:06  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
GC -шные библиотеки "одевают" всё.
в смысле? поясни пожалуйста.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Самый главный в С++ вопрос о GC звучит так: - А зачем (зачем - мягко сказано) тогда С++? (имхо).
зачем тогда их одевают все, я не понял тебя.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.12.2019, 10:59
Цитата Сообщение от _stanislav Посмотреть сообщение
в смысле? поясни пожалуйста.
В ходе обсуждения это было:
Цитата Сообщение от Undisputed Посмотреть сообщение
Алексей1153,
А как "одеть" указатель?
Одеть это обернуть. Умеый указатель это обёртка над указателем инкапсулирующая владение (управление временем жизни). Итератор - обёртка над указателем инкапсулирующая ряд операций среди которых главные - next (++) и previous (--). Для аллокации тоже нужна обёртка над соответствующим способом выделения/освобождения типа new/delete например. Она инкапсулирует управление памятью и добавляет способ хранения инфы о жизнеспособности (подсчёта ссылок, например) и такой зверь может называться (по желанию разраба) как то вроде GC_NEW. Я писал обобщённый функтор.
Цитата Сообщение от _stanislav Посмотреть сообщение
зачем тогда их одевают все, я не понял тебя.
С++ - кухня для приготовления тысячи блюд из мяса. Можно поставить в ней автомат для хотдогов и зачехлить всё остальное. Но лучше зачехлить ресторан и уйти в макдональдс. Или самому зачехлиться. Не в обиду Жава проггерам сказано. Потому что если нужны хотдоги или макбургеры, то глупо идти за ними в дорогой ресторан. Лучше тогда инструмент для этой задачи и использовать.

Добавлено через 12 минут

Не по теме:

зы это у всех такие тормоза с форумом или у меня только?

0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
02.12.2019, 11:25
IGPIGP,
Так все дело в том что программист в случае стандартного gc "не одевает" указатель. Нет никаких обёрток.
http://www.stroustrup.com/C++11FAQ.html#gc-abi
По этой ссылке ничего подобного нет. Работа идёт по прежнему, только не думаем о delete (за то начинаем держать в голове правила работы с gc). Поэтому мне не понятно почему уже вторую страницу речь идёт про обёртки, в то время как тема о стандартном gc. Понимаю, сейчас зима, хочется одеться самому и одеть указатели, но указатели не мерзнут, можете не переживать
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
02.12.2019, 11:55
Цитата Сообщение от Undisputed Посмотреть сообщение
По этой ссылке ничего подобного нет.
Если программист никак указатель не одевает, как ему сообщить компилятору что он желает пользоваться GC? В настройках проекта задать? То есть, перенесли либу в сторонний проект/изменили ключи сборки программы и память потекла в три ручья, деструкторы перестали вызываться и код рассыпался как карточный домик?

А, стоп, вот же ответ - "There is no standard way of saying which alternative you prefer. Considered that a "quality of implementation" and a "programming environment" issue. ". То ли цитату первого апреля писали, то ли снизу постучали.
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
02.12.2019, 12:50
Renji,
Нормальному gc ничего сообщать обычно не нужно. На то он и gc, что бы отслеживать ресурсы без вмешательства программиста иначе от него скорее будет больше проблем чем пользы
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
02.12.2019, 13:04
Цитата Сообщение от Undisputed Посмотреть сообщение
Нормальному gc ничего сообщать обычно не нужно.
Нормальный gc обычно и присутствует всегда, а не в зависимости от настроек компилятора. Делать gc работающим по умолчанию никто не будет, потому что накладные расходы. Если "ну и что, что расходы, зато писанины меньше", так это в Питончик какой. А C++ вроде как стоит на идеологии "да пусть даже и больше писанины, главное что работать быстрее будет и экономнее". Таким образом, должен быть способ явно указать "хочу gc". Только я этого способа чего-то не вижу.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
02.12.2019, 13:11
Renji,
Согласен, это должно быть без принуждений. Чтоб был вкл/выкл... А когда он вкл, что бы сам следил за ресурсами. Но думаю что все таки эта фича не для с++, даже с возможностью вкл/выкл
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.12.2019, 13:24
Цитата Сообщение от Undisputed Посмотреть сообщение
Нормальному gc ничего сообщать обычно не нужно.
Undisputed, приведите пример в С++ из вашего опыта.

Добавлено через 12 минут
Undisputed, вы читали текст по предложенной вами ссылке?
Тогда обратите внимание на предложенную там БС ссылку на реализацию:
https://dl.acm.org/citation.cf... 31.1542437
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
02.12.2019, 14:28
IGPIGP,
В С++ я gc не пользовался. Но это никак не меняет сути gc.
Не вижу кода по вашей ссылке. А на ФАГе Страуструпа код есть и указатели в нем не одетые.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.12.2019, 14:44
Undisputed, ваш ответ содержит две несовместимые части. И не только в последнем посту. Но давайте с последнего начнём:
Цитата Сообщение от Undisputed Посмотреть сообщение
В С++ я gc не пользовался.
Так откуда же вы знаете о том, что GC в С++ должен а что нет. Это тема не о марсианах и GC в С++ известный вопрос. И вы сами показали осведомлённость предлагая ссылку
Цитата Сообщение от Undisputed Посмотреть сообщение
GPIGP,
Так все дело в том что программист в случае стандартного gc "не одевает" указатель. Нет никаких обёрток.
http://www.stroustrup.com/C++11FAQ.html#gc-abi
равно как и не понимание того, что в ней написано. Undisputed, что вами движет в этой теме и как вы определяете его суть когда пишете вторую и несовместимую с первой частью часть своего утверждения:
Цитата Сообщение от Undisputed Посмотреть сообщение
Но это никак не меняет сути gc.
??
Цитата Сообщение от Undisputed Посмотреть сообщение
Не вижу кода по вашей ссылке.
А там и нет его. Там написано о том, что библиотека не реализуется без внешних зависимостей так как компиляторы сегодне не поддерживают такую возможность. Это к тому о чём вы говорили.
Цитата Сообщение от Undisputed Посмотреть сообщение
А на ФАГе Страуструпа код есть и указатели в нем не одетые.
Да, там есть такое место. А что он там говорит, демонстрируя неодетые указатели вы прочли?
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
02.12.2019, 15:32
IGPIGP,
Я читал текст по той ссылке. И по контексту я понял что сборщик должен уметь работать с указателем, полученным через new, то есть не одетым указателем. Если вы считаете что я где-то ошибся, то прошу укажите конкретно на ошибку. А то шума много, но ничего конкретного нет
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.12.2019, 15:45
Цитата Сообщение от Undisputed Посмотреть сообщение
IGPIGP,
Я читал текст по той ссылке. И по контексту я понял что сборщик должен уметь работать с указателем, полученным через new, то есть не одетым указателем. Если вы считаете что я где-то ошибся, то прошу укажите конкретно на ошибку. А то шума много, но ничего конкретного нет
Undisputed, у меня английский на черте флюент или до неё в километре где-то. Но даже я вижу что сырые указатели БС показывает для демонстрации того зачем GC мог бы понадобиться. Он говорит о том, что человеку не нужно вручную выделять и освобождать память, что бы не вызвать у него грусть и уныние. А далее он говорит от том, что требуется создать базовый класс от которого унаследуют все безопасные указатели. GC будет возбуждаться только на них и оставаться холоден к небезопасным. То есть, только защищённый секс. Как бы ни обольстительно вели себя опасные и очень сырые указатели и даже некоторые унаследованные как я понял.
Цитата Сообщение от БС
strict: safely-derived and not safely-derived pointers may be treated differently, i.e. a garbage collector may be running and will ignore pointers that's not safely derived
темновато для моего перевода, но понятно, что с сырыми указателями (слава богу) оно не должно работать.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
02.12.2019, 15:55
IGPIGP,
1) Где вы там увидели про базовый класс?
2) Указатель это не классовый тип и унаследовать функционал класса он не может
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
02.12.2019, 16:01
Цитата Сообщение от IGPIGP Посмотреть сообщение
А далее он говорит от том, что требуется создать базовый класс от которого унаследуют все безопасные указатели.
Там что-то очень расплывчатое уровня "хорошо быть богатым и здоровым".

И не заведется оно на классах.
Делаем сборщик мусора на основе подсчета ссылок, прям как в shared_ptr. Объект A ссылается на объект B, а объект B ссылается обратно на A. Где эти A и B лежат никто уже и не знает, но счетчик ссылок то не нулевой! Утечка памяти.
Делаем сборщик мусора считающий достижимость объекта из указателя в локальных и глобальных переменных. А откуда умному указателю знать локальный он или в динамической памяти лежит? Особенно, если он в другой объект вложен. В рамках C++ затея получается еще более сомнительной.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.12.2019, 16:15
Цитата Сообщение от Undisputed Посмотреть сообщение
Указатель это не классовый тип и унаследовать функционал класса он не может
Undisputed, указатель можно написать. Вы shared_ptr от сырого указателя отличаете?
Цитата Сообщение от Renji Посмотреть сообщение
И не заведется оно на классах.
Заведтся, но сырые нужно в покое оставить иначе куча кода в мусор. На это даже сумасшедший не пойдёт.

Добавлено через 2 минуты
Цитата Сообщение от Renji Посмотреть сообщение
Там что-то очень расплывчатое уровня "хорошо быть богатым и здоровым".
Ну и я о том. Очень похоже на то, что человек пытается сказать:-"Смотрите во что вы меня втягтваете!"
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
02.12.2019, 16:16
IGPIGP,
Отличаю. Так где там про базовый класс то написано?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.12.2019, 17:01  [ТС]
Undisputed, я думаю ты правильно понял работу стандартного GC.

Добавлено через 13 секунд
солидарен.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.12.2019, 18:51
Цитата Сообщение от _stanislav Посмотреть сообщение
понял работу стандартного GC
В стандарте есть про GC?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.12.2019, 18:51
Помогаю со студенческими работами здесь

Очистка мусора
1. Если я на форме, в процессе работы, буду очень часто менять изображения на одном и том же pictureBox, то форма будет занимать большой...

Сборка мусора
Нужна ли в Си ++ «сборка мусора»? Почему возникает такая проблема и как она решается в Си++?

Функции и сборка мусора
Незнаю, туда ли поместил... Вобщем ситуация такая: про new(malloc()) и delete(free()) таки знаю немало, как и про динамическую(свободную)...

Уборка мусора из double
Подскажите, как убрать мусор из числа типа double. Например число 13 на самом деле не 13, а 13.00000001.

Как избавиться от записи мусора?
#include &lt;string.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include &lt;iostream&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru