|
"C with Classes"
|
|
Сборщик мусора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
|
|
| 01.12.2019, 19:38 | |
|
Ответы с готовыми решениями:
54
Сборщик мусора задача не для новичков- сборщик мусора
|
|
"C with Classes"
|
||
| 02.12.2019, 19:04 [ТС] | ||
|
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
|
||
|
Комп_Оратор)
|
|||
| 02.12.2019, 19:09 | |||
|
Это понимаешь
А это: То есть, вроде как сформулированы требования, но нет компиляторов которые это делают. Доступных по крайней мере. Можно создать объектный мир типа шарпа или кьюта и тоже обеспечить автоматику... Можно библиотекой реализовать указатели и их инициализацию. Можно, наконец, и компилятор заставить это делать ключами, но куча кода не будет компилироваться без кучи гемора. Последний вариант - это процесс ради процесса как говорил поручик Ржевский. То есть, милое дело, для ценителей.
1
|
|||
|
"C with Classes"
|
|||
| 02.12.2019, 19:26 [ТС] | |||
|
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 минут
0
|
|||
|
0 / 0 / 0
Регистрация: 17.06.2018
Сообщений: 68
|
|
| 02.12.2019, 19:34 | |
|
Откуда эти строки?
0
|
|
|
"C with Classes"
|
||
| 02.12.2019, 20:06 [ТС] | ||
|
Тебя я то же понял кстати, спасибо. Добавлено через 1 минуту чуть не так выразился и началось ![]() Добавлено через 1 минуту при тебе слово стандартный в контексте C++ вообще нельзя говорить по ходу.
0
|
||
|
Комп_Оратор)
|
|||
| 02.12.2019, 20:12 | |||
|
0
|
|||
|
"C with Classes"
|
|
| 02.12.2019, 20:15 [ТС] | |
|
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 | ||
|
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 13.12.2022, 18:13 | |||
|
Мы же говорим про объекты в С++ программе. Точнее вы говорите: Geek Geekson, С++ не регламентирует как будет устроена куча и как будет устроен стек. И правила в нем не привязаны никак к тому, каким образом это реализует ОС (если она вообще есть), и каким образом это будет реализовывать runtime С++. Вместо этого используется понятие storage duration; вот от него и надо отталкиваться в обсуждениях, которые затрагивают сам язык. Так что выше вы фактически предложили вот что: "пусть объекты с dynamic storage duration будут иметь встроенный в язык механизм контролирующий их время жизни в пределах заданного scope". Сама по себе идея так их контролировать в принципе неплоха и прекрасно реализуется библиотечными средствами (это уже сказал).
0
|
|||
|
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
|
||
| 13.12.2022, 18:13 | ||
|
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 13.12.2022, 18:36 | ||
|
Так вот, из-за этого всякие решения о предоставлении по вашему запросу памяти принимает именно этот менеджер памяти внутри рантайма, а не ОС напрямую. Т.к. рантайм С++ - при работе программы находится в том же адресном пространстве, что и весь остальной код, то с этой точки зрения абсолютно параллельно каким именно образом будет выделяться память в операторе new (главное, чтобы соблюдались базовые контракты): способом по умолчанию, который предоставляет runtime C++, вашим собственным способом (который даже может в принципе задействовать функции ОС напрямую) или вообще используя свою собственную адресацию с хранением данных в файле вместо памяти (за примером в boost::interprocess). Именно поэтому С++ никакого конкретного понятия "куча" не вводит.
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 13.12.2022, 18:37 | |||
|
0
|
|||
| 13.12.2022, 18:37 | |
|
Помогаю со студенческими работами здесь
55
Очистка мусора Сборка мусора
Уборка мусора из double Как избавиться от записи мусора? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
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, то после закрытия окошка. . .
|