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

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

01.12.2019, 19:38. Показов 9896. Ответов 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
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.12.2019, 19:04  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IGPIGP Посмотреть сообщение
В стандарте есть про GC?
вроде как в С++11 добавили вот цитата Страуструпа с его сайта:

Garbage collection (automatic recycling of unreferenced regions of memory) is optional in C++; that is, a garbage collector is not a compulsory part of an implementation. However, C++11 provides a definition of what a GC can do if one is used and an ABI (Application Binary Interface) to help control its actions.

http://www.stroustrup.com/C++11FAQ.html#gc-abi

а вот цитата и его книги, на всякий случай, если первую страницу темы пропустил:
Сборщик мусора

Добавлено через 59 секунд
документально в стандарте не искал, просто лень мне его читать.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.12.2019, 19:09
Это понимаешь
Цитата Сообщение от _stanislav Посмотреть сообщение
a garbage collector is not a compulsory part of an implementation
?
А это:
Цитата Сообщение от _stanislav Посмотреть сообщение
However, C++11 provides a definition of what a GC can do if one is used and an ABI (Application Binary Interface) to help control its actions.
?
То есть, вроде как сформулированы требования, но нет компиляторов которые это делают. Доступных по крайней мере. Можно создать объектный мир типа шарпа или кьюта и тоже обеспечить автоматику... Можно библиотекой реализовать указатели и их инициализацию.
Можно, наконец, и компилятор заставить это делать ключами, но куча кода не будет компилироваться без кучи гемора. Последний вариант - это процесс ради процесса как говорил поручик Ржевский. То есть, милое дело, для ценителей.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.12.2019, 19:26  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
В стандарте есть про GC?
нашел косвенное упоминание:

Storage allocated directly with these functions is implicitly declared reachable (see 6.6.4.4.3) on
allocation, ceases to be declared reachable on deallocation, and need not cease to be declared reachable
as the result of an undeclare_reachable() call. [Note: This allows existing C libraries to remain
unaffected by restrictions on pointers that are not safely derived, at the expense of providing far fewer
garbage collection and leak detection options for malloc()-allocated objects. It also allows malloc()
to be implemented with a separate allocation arena, bypassing the normal declare_reachable()
implementation. The above functions should never intentionally be used as a replacement for declare_-
reachable(), and newly written code is strongly encouraged to treat memory allocated with these
functions as though it were allocated with operator new. — end note]


Добавлено через 16 минут
Цитата Сообщение от _stanislav Посмотреть сообщение
я думаю ты правильно понял работу стандартного GC
тут стандартный не от понятия что он есть в стандарте, а от того что он не сторонний не из какой нибудь библиотеки или не от какого нибудь самодельного компилятора.
0
0 / 0 / 0
Регистрация: 17.06.2018
Сообщений: 68
02.12.2019, 19:34
Откуда эти строки?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.12.2019, 19:59
Цитата Сообщение от _stanislav Посмотреть сообщение
тут стандартный не от понятия что он есть в стандарте, а от того что он не сторонний не из какой нибудь библиотеки или не от какого нибудь самодельного компилятора.
От Бога, имеешь ввиду?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.12.2019, 20:06  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
От Бога, имеешь ввиду
короче ты меня понял, можешь формализовать дальше и больше, плюс я получил ответ на свой вопрос еще в посте https://www.cyberforum.ru/post14050756.html.
Тебя я то же понял кстати, спасибо.

Добавлено через 1 минуту
чуть не так выразился и началось

Добавлено через 1 минуту
при тебе слово стандартный в контексте C++ вообще нельзя говорить по ходу.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.12.2019, 20:12
Цитата Сообщение от _stanislav Посмотреть сообщение
короче ты меня понял, можешь формализовать дальше и больше
Я начинал с С++ Cli, это диалект со сборкой мусора. То есть, видел и конкретное воплощение. Для себя написал пару наивных реализаций для GC и вполне рабочих. Там много чего не было. Кастов указателей например. Но допускались присваивания обычных указателей GC-шным. При чём тут формализм, как таковой? Я просто, как-то потрогал тему за вымя. И это пока является источником уверенности в том, что если нативный код из плюсов выкурят, то начнётся отток программеров в С.
Цитата Сообщение от _stanislav Посмотреть сообщение
спасибо.
Удачи.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.12.2019, 20:15  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
то начнётся отток программеров в С
я первый дам деру
0
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
13.12.2022, 17:19
Немного общих размышлений. Зачем вообще прибегают к ручному управлению памятью (new/delete)? Чаще всего чтобы просто выделить её из кучи (а не из стека). Потому что стек маленький. При этом оборачивают голый поинтер в смарт, чтобы он вёл себя как объект с локальной областью видимости (и авто продолжительностью жизни). Так почему же не добавить в язык способ выделения объектов сразу в куче, с автоматической продолжительностью жизни?

Причём многие стандартные классы и контейнеры (тот же vector например) уже имеют такое поведение и проблем с ними вроде особо и нет.

Если где-то ошибаюсь, поправьте.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
13.12.2022, 17:27
Geek Geekson, динамичекий объект с временем жизни, ограниченным локальным скоупом - это очень частный случай, гораздо чаще нужно передавать куда-то владение. Т.е. условный scoped_ptr (то, о чем говорите вы) и тот же unique_ptr - это разные вещи, и последний нужен гораздо чаще.
С++ вообще в основе своей многое переложил на библиотеки, by design, так сказать. Поэтому чего удивляться, если частная утилитарная задача не решается в core language, т.к. успешно решается библиотечным кодом.

Так же не стоит забывать, что само по себе понятие "куча" очень размыто, потому что язык позволяет перегружать операторы new\delete.
0
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
13.12.2022, 17:48
Цитата Сообщение от DrOffset Посмотреть сообщение
Так же не стоит забывать, что само по себе понятие "куча" очень размыто, потому что язык позволяет перегружать операторы new\delete.
Тут не понял. Стек и куча вроде обеспечиваются самой ОС, и от того что мы в своей программе для каких-то классов придали другой смысл оператору new, как это повлияет на стек и кучу?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
13.12.2022, 18:13
Цитата Сообщение от Geek Geekson Посмотреть сообщение
Стек и куча вроде обеспечиваются самой ОС, и от того что мы в своей программе для каких-то классов придали другой смысл оператору new, как это повлияет на стек и кучу?
А при чем тут ОС?
Мы же говорим про объекты в С++ программе. Точнее вы говорите:
Цитата Сообщение от Geek Geekson Посмотреть сообщение
голый поинтер в смарт, чтобы он вёл себя как объект с локальной областью видимости (и авто продолжительностью жизни). Так почему же не добавить в язык способ выделения объектов сразу в куче, с автоматической продолжительностью жизни?
Добавлено через 10 минут
Geek Geekson, С++ не регламентирует как будет устроена куча и как будет устроен стек. И правила в нем не привязаны никак к тому, каким образом это реализует ОС (если она вообще есть), и каким образом это будет реализовывать runtime С++.
Вместо этого используется понятие storage duration; вот от него и надо отталкиваться в обсуждениях, которые затрагивают сам язык.

Так что выше вы фактически предложили вот что: "пусть объекты с dynamic storage duration будут иметь встроенный в язык механизм контролирующий их время жизни в пределах заданного scope". Сама по себе идея так их контролировать в принципе неплоха и прекрасно реализуется библиотечными средствами (это уже сказал).
0
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
13.12.2022, 18:13
Цитата Сообщение от DrOffset Посмотреть сообщение
А при чем тут ОС?
Мы же говорим про объекты в С++ программе.
Ну как же, когда программа запрашивает память из кучи - ОС (если она есть) решает, предоставить её или нет, и по какому адресу. И размер стека по умолчанию задаётся ОС. Если конечно она есть.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
13.12.2022, 18:36
Цитата Сообщение от Geek Geekson Посмотреть сообщение
Ну как же, когда программа запрашивает память из кучи - ОС (если она есть) решает, предоставить её или нет, и по какому адресу.
Между ОС и программой есть runtime c++, менеджер памяти которого обычно и предоставляет реализацию "кучи", которую вы используете. Это все конечно непосредственно к языку отношения не имеет, но раз уж вам так хочется поговорить про реализацию, то давайте.
Так вот, из-за этого всякие решения о предоставлении по вашему запросу памяти принимает именно этот менеджер памяти внутри рантайма, а не ОС напрямую.
Т.к. рантайм С++ - при работе программы находится в том же адресном пространстве, что и весь остальной код, то с этой точки зрения абсолютно параллельно каким именно образом будет выделяться память в операторе new (главное, чтобы соблюдались базовые контракты): способом по умолчанию, который предоставляет runtime C++, вашим собственным способом (который даже может в принципе задействовать функции ОС напрямую) или вообще используя свою собственную адресацию с хранением данных в файле вместо памяти (за примером в boost::interprocess). Именно поэтому С++ никакого конкретного понятия "куча" не вводит.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
13.12.2022, 18:37
Цитата Сообщение от Geek Geekson Посмотреть сообщение
Потому что стек маленький.
Дело не в том, что он маленький. Покопайтесь в настройках компилятора, там наверняка есть ключик для "сделать стек большим". Дело в том, что из стека нельзя удалять элементы в произвольном порядке. Поэтому, составные объекты типа деревьев в стеке хранить не очень удобно.
Цитата Сообщение от Geek Geekson Посмотреть сообщение
Так почему же не добавить в язык способ выделения объектов сразу в куче, с автоматической продолжительностью жизни?
Вы пытаетесь придумать std::vector. Пожалуйста, автоматическая продолжительность жизни, но "тяжелые" данные вынесены в кучу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2022, 18:37
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
55
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru