c-smile,
> sch> Опять же любой индивид, который увидел C++ "месяц назад" прочитает того же Александреску без труда, узнает для себя много нового и полезного.
> Сомневаюсь я сильно в выделенной фразе. > Более того приходилось общаться с указанным автором вживую. > Скажем так я дично не понял треть абстракций которые он использует.
Это polite форма сказать, что ты не согласен с абстракциями, выбранными автором, или же ты действительно считаешь, что ты их не понял? Во втором случае, можно пример?
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>c-smile,
>> sch> Опять же любой индивид, который увидел C++ "месяц назад" прочитает того же Александреску без труда, узнает для себя много нового и полезного.
>> Сомневаюсь я сильно в выделенной фразе. >> Более того приходилось общаться с указанным автором вживую. >> Скажем так я дично не понял треть абстракций которые он использует.
ПК>Это polite форма сказать, что ты не согласен с абстракциями, выбранными автором, или же ты действительно считаешь, что ты их не понял? Во втором случае, можно пример?
Скажем так: на третьей странице некоей "темплатуёвины" я перестаю хотеть его понимать.
Здравствуйте, c-smile, Вы писали:
CS>Умный вещь №1: Честные мусорщики стоят дорого. Не все их могут себе позволить. CS>Во всех смыслах. Например честный мусорщик без reflection (runtime meta-information) не работает.
В .NET GC reflection не использует ибо reflection не просто тормоз, а супер тормоз те в случае использования reflection'а производительность GC былабы просто никакая.
Все необходимые для GC данные получаются во время JIT компиляции. А в компилируемых языках этим может заняться компилятор.
CS>Умный вещь №2: честных GC в природе не бывает.
В .NET GC честный. CS>Вернее так: честный GC по определинию слишком легко надурить. Достаточно разместить начало некого списка на периметре (aka roots — например static или stack bottom) — и все — приплыли.
Ты не поверишь но со счетчиком ссылок и нечестным GC таже фигня.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, c-smile, Вы писали: CS>Умный вещь №1: Честные мусорщики стоят дорого. Не все их могут себе позволить.
Это я могу понять. CS>Во всех смыслах. Например честный мусорщик без reflection (runtime meta-information) не работает.
Ага.
CS>Нет, не так. Есть ненулевая вероятность что что-то зависнет в памяти навсегда. CS>Поэтому золотое правило в С++/D + GC — "зануляй ненужную память".
Дело хорошее, но... CS>У меня нпример в одном проекте деструктор ничего не удаляет — просто делает memset 0x0000DEAD.
...главное — не забыть позвать деструктор А если мы это не забываем, то к чему вообще GC? (Наверное, для снижения фрагментации и повышения пиковой производительности благодаря отложенному освобождению)
CS>Умный вещь №2: честных GC в природе не бывает. Вернее так: честный GC по определинию слишком CS>легко надурить. Достаточно разместить начало некого списка на периметре (aka roots — например static или stack bottom) — и все — приплыли.
Не вижу надуривания. Объект достижим. Поэтому его нельзя собирать. То, что он нам на самом деле больше не нужен, обнаружить никак нельзя. Даже если у нас в памяти нет кода, который бы читал этот статик и ходил по этой ссылке, через минуту мы можем дозагрузить именно такой код.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, vdimas, Вы писали:
Z>>>Для решения этого недостатка уже давно придумали разделение на weak- и strong- указатели.
VD>> Вручную?
V>именно, на этапе проектирования
Ну, слава богу хоть не понос.
ЗЫ
Чем дальше, тем забавнее читать твои ответы. Ты о чем думашь когда отвечашь? Я задаю один вопрос, а ты отвечашь на другой.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Sinclair,
> CS>У меня нпример в одном проекте деструктор ничего не удаляет — просто делает memset 0x0000DEAD.
> ...главное — не забыть позвать деструктор А если мы это не забываем, то к чему вообще GC?
ИМХО, это главная проблема GC: всегда находятся "деструкторы", которые нужно не забыть вызвать. В C# это Dispose().
> Не вижу надуривания. Объект достижим. Поэтому его нельзя собирать. То, что он нам на самом деле больше не нужен, обнаружить никак нельзя. Даже если у нас в памяти нет кода, который бы читал этот статик и ходил по этой ссылке, через минуту мы можем дозагрузить именно такой код.
И какая разница с точки пользователя? И там, и там память, отведенная под объект(ы), не освобождена...
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>А напомни-ка мне, когда освобождаются объекты из 2-го поколения?..
Когда не хватает памяти после зачистки 0 и 1 поколения.
>> ПК>А напомни-ка мне, когда освобождаются объекты из 2-го поколения?..
>> Когда не хватает памяти после зачистки 0 и 1 поколения.
ПК>Т.е. на практике может вообще не вызываться.
Не-а, будет вызываться. Хотя бы при выходе из программы. ПК>Это я к тому, что критерии "честности", основанные на "полноте" уборки мусора, достаточно зыбки...
Насчет критериев честности, дам тебе шанс. При сборке в large (такая шняга для хранения больших объектов), память не дефрагментируется, и соответсвенно в принципе, возможно занятие памяти больше чем нужно.
С уважением, Gleb.
PS. Честно говоря мне как то по барабану критерии честности, гораздо интереснее функциональность. Насколько я должен учитывать GC в работе. Пока лучше нетовского не видел.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, c-smile, Вы писали:
CS>>Умный вещь №1: Честные мусорщики стоят дорого. Не все их могут себе позволить. CS>>Во всех смыслах. Например честный мусорщик без reflection (runtime meta-information) не работает. WH>В .NET GC reflection не использует ибо reflection не просто тормоз, а супер тормоз те в случае использования reflection'а производительность GC былабы просто никакая.
Я не про .Net.Reflection package говорю.
Когда два массива в памяти
object a1[]; и int a2[]; первый надо сканировать, второй нет.
Т.е. информация о типе должна наличествовать в аллоцированной памяти.
Консервативный GC этой информации не требует но сканирует оба массива — just in case.
WH>Все необходимые для GC данные получаются во время JIT компиляции. А в компилируемых языках этим может заняться компилятор.
А при чем здесь JIT? в памяти .net все аллоцированные сущности обязаны иметь ссылку на класс/тип
CS>>Умный вещь №2: честных GC в природе не бывает.
WH>В .NET GC честный.
То нам не ведомо
Видел ли ты исходники оного?
CS>>Вернее так: честный GC по определинию слишком легко надурить. Достаточно разместить начало некого списка на периметре (aka roots — например static или stack bottom) — и все — приплыли. WH>Ты не поверишь но со счетчиком ссылок и нечестным GC таже фигня.
Да. А я и не говорю что это только для GC проблема.
GlebZ,
>>> ПК> А напомни-ка мне, когда освобождаются объекты из 2-го поколения?..
>>> Когда не хватает памяти после зачистки 0 и 1 поколения.
> ПК>Т.е. на практике может вообще не вызываться.
> Не-а, будет вызываться. Хотя бы при выходе из программы.
Т.е.? Даже все Finalizers в обязательном порядке будут вызваны?
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, c-smile, Вы писали: CS>>Умный вещь №1: Честные мусорщики стоят дорого. Не все их могут себе позволить. S>Это я могу понять. CS>>Во всех смыслах. Например честный мусорщик без reflection (runtime meta-information) не работает. S>Ага.
CS>>Нет, не так. Есть ненулевая вероятность что что-то зависнет в памяти навсегда. CS>>Поэтому золотое правило в С++/D + GC — "зануляй ненужную память". S>Дело хорошее, но... CS>>У меня нпример в одном проекте деструктор ничего не удаляет — просто делает memset 0x0000DEAD. S>...главное — не забыть позвать деструктор А если мы это не забываем, то к чему вообще GC? (Наверное, для снижения фрагментации и повышения пиковой производительности благодаря отложенному освобождению)
А зачем его звать-то ? Он сам вызывается при выходе из зоны видимости.
CS>>Умный вещь №2: честных GC в природе не бывает. Вернее так: честный GC по определинию слишком CS>>легко надурить. Достаточно разместить начало некого списка на периметре (aka roots — например static или stack bottom) — и все — приплыли. S>Не вижу надуривания. Объект достижим. Поэтому его нельзя собирать. То, что он нам на самом деле больше не нужен, обнаружить никак нельзя. Даже если у нас в памяти нет кода, который бы читал этот статик и ходил по этой ссылке, через минуту мы можем дозагрузить именно такой код.
Это я к тому что с памятью как и с любым другим ресурсом нужно
работать аккуратно и грамотно. В любых системах.
GC не панацея. А конкретный инструмент. А инструменты надо знать хорошо.
Если ты чего-то хочешь ими сделать толковое.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>GlebZ,
>>>> ПК> А напомни-ка мне, когда освобождаются объекты из 2-го поколения?..
>>>> Когда не хватает памяти после зачистки 0 и 1 поколения.
>> ПК>Т.е. на практике может вообще не вызываться.
>> Не-а, будет вызываться. Хотя бы при выходе из программы.
ПК>Т.е.? Даже все Finalizers в обязательном порядке будут вызваны?
Ну да. Правда там с порядком вызова будут проблемы.
Здравствуйте, c-smile, Вы писали:
CS>А зачем его звать-то ? Он сам вызывается при выходе из зоны видимости.
Если у тебя все разрушается при выходе из области видимости, то никакой GC не нужен. Да и мемори менеджер тоже — стек аллокатор будет более чем достаточен. CS>Это я к тому что с памятью как и с любым другим ресурсом нужно CS>работать аккуратно и грамотно. В любых системах.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Т.е. на практике может вообще не вызываться. Это я к тому, что критерии "честности", основанные на "полноте" уборки мусора, достаточно зыбки...
Самое главное чтобы не было утечек. А уж кто и когда не столь важно. Точные критерии очистки 2 поколения лично мне неизвестны, но уж точно не только когда места нехватает.
AndrewVK,
> ПК> Т.е. на практике может вообще не вызываться. Это я к тому, что критерии "честности", основанные на "полноте" уборки мусора, достаточно зыбки... > > Самое главное чтобы не было утечек.
Если под отсутствием утечек понимать освобождение памяти по крайней мере в момент завершения программы, то утечек вообще нигде не будет.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен