Войти
ФлеймФорумПрограммирование

Оперативная/не оперативная, RAM/не RAM, а так же иннуендо-фрагментация. (44 стр)

Страницы: 141 42 43 44 45 46 Следующая »
#645
22:48, 25 июля 2017

MrShoor
> А вот те ребята, которые говорят, что для С++ легко сделать GC,
Ткните пальцем в ребят которые говорили что сделать легко.

MrShoor
> расскажите, как такое вообще возможно?
Вот тут по ссылке самое подробное руководство - http://www.hboehm.info/gc/gc_source/gc-7.6.0.tar.gz

MrShoor
> Как это вообще можно разрулить на уровне malloc, объясните. Я не понимаю.
MrShoor
> Короче номальный GC на C++ не сделать. Для этого надо как минимум запретить
> работать с сырыми указателями.

Всегда приятно послушать экспертов. )))) По ссылке выше лежат исходники GC который используется в
реализации моно. Кстати это GC для С и С++ (привет сырые указатели нильзя). Очевидно, что некоторые
вещи, например перемещение, трудно или даже не возможно сделать не зная ничего об объектах на
стороне сборщика. Можете почитать доки у них на сайте, заодно расскажете что там да как. Я лично
понятия не имею как оно там работает и работает ли вообще. )))

Ну а если без шуток то вот есть краткое описание в слайдах - http://www.hboehm.info/gc/04tutorial.pdf

#646
22:54, 25 июля 2017

innuendo
> как только начинают многочисленные изменения по желанию заказчика становится
> очень весело
Никак это не влияет на работу со смартпоинтерами. Сейчас как раз работаю над проектом, в котором 90% кода на смартпоинтерах, вообще все опупенненько. Просто, удобно, и никаких ликов с самого начала разработки не видел.

> Я уже устал объяснять... чтобы всё было чики пуки нужно помедитировать на
> логикой
Чтобы все было чикипуки - нужно уметь работать со смартпоинтерами. Само собой без какой либо архитектуры (типа поговнокодили тут, поговнокодили там) - можно наворотить делов, но то же самое будет и в С#. Смартпоинтеры в этом случае - будут последней проблемой, которая будет тебя заботить, а на первое место вылезут проблемы поломанной бизнес логики приложения вне зависимости от языка. Так что медитировать надо одинаково что в C++,  что в C#.

#647
22:55, 25 июля 2017

MrShoor
> Вряд ли Страуструп имел ввиду: "можно имплементировать свой GC".
Ну можно у него переспросить, я не нашел если честно это интервью сейчас.

MrShoor
> В С++ элементарно нет ни информации о переменных, ни информации о типах. Так
> что все, что можно сделать в С++ - это умные указатели. Но умные указатели
> (shared + weak) вполне годно справляются со сборкой мусора.
Держитесь за стул, там неважны умные указатели. Но очевидно что да, реализовать алгоритм,
который заточен под то, что нужны данные об объектах на стороне сборщика в данном случае
явно не получится, но ведь задача то такая и не стоит.

Faceroll
> Все GC для крестов (все 1) просто сканируют стеки и область глобальных
> переменных целиком на все что похоже на указатель.
Судя по тому, что BGC заявлен как трассирующий похоже на правду.

#648
22:57, 25 июля 2017

exchg
> Очевидно, что некоторые
> вещи, например перемещение, трудно или даже не возможно сделать не зная ничего
> об объектах на
> стороне сборщика.
Перемещения для С++ он и не делает. Просто сканирует всю выделенную память(*) в поисках указателей, если на какой-то (выделенный маллоком) участок указатель не нашлось - удаляет. Если в строке случайно попадутся байты похожие на указатель - так и не сможет удалить. Если наоборот, кто-то решит хранить указатель не выравненным или будет делать хаки с младшими битами - наоборот удалит то что еще используется.

(*) - вообще там можно пометить при выделении участки в которых точно указателей нет, но автоматически он это определить не может.

Ну а моно как я понял реализует перемещающий GC самостоятельно, Boehm там только для "грязной работы".

#649
22:58, 25 июля 2017

BTW, есть еще такое: https://github.com/hsutter/gcpp

#650
23:01, 25 июля 2017

kipar
> Перемещения для С++ он и не делает.
http://www.hboehm.info/gc/complexity.html да не делают.

#651
23:05, 25 июля 2017

kipar
> Ну а моно как я понял реализует перемещающий GC самостоятельно, Boehm там
> только для "грязной работы".
Ну не упомяни тут моно еще две страницы назад сказалибы, что это студенческая лаба
которая внимания не достойна. Кстати его еще и inkscape использует.

#652
23:05, 25 июля 2017

exchg
Ну так копирование же и есть основное преимущество гц, за счет которого он в определенных случаях даже обгоняет обычные аллокаторы. "Большинство умирают молодыми", всё такое. Но нет, BoehmGC будет снова и снова сканировать всю память за редкими исключениями, периодически останавливая мир чтобы убедиться что ничего не упустил.

Его много кто используют, потому что это "гц для неосиляторов". Просто берешь и вместо malloc вызываешь его функцию. Всё. Другие гц так легко не подключить. Ну и все минусы тоже из этого вытекают.

#653
23:16, 25 июля 2017

kipar
> Ну так копирование же и есть основное преимущество гц, за счет которого он в
> определенных случаях даже обгоняет обычные аллокаторы. "Большинство умирают
> молодыми", всё такое. Но нет, BoehmGC будет снова и снова сканировать всю
> память за редкими исключениями, периодически останавливая мир чтобы убедиться
> что ничего не упустил.
Ну в данном контексте эффективность вопрос 10, мне например вообще не сильно понятно
зачем это нужно (GC), но раз оно есть и кем то используется то почему бы и нет. Тут было за
фрагментацию в принципе и возможность подключать разнообразные менеджеры памяти как
один из методов (алгоритмический) для решения проблем фрагментации когда она возникнет.
По фрагментации в основном был заявлен магазинный slab.

#654
23:22, 25 июля 2017

exchg
Ну да. А я просто хотел сказать что тот гц который в java\.net\mono сравнивать с тем который можно подключить к С++ некорректно - возможности второго сильно беднее.

#655
23:46, 25 июля 2017

kipar
> А я просто хотел сказать что тот гц который в java\.net\mono сравнивать с тем
> который можно подключить к С++ некорректно - возможности второго сильно беднее.
Ну пока да. Но чисто теоретически никто не запрещает третьей стороне разработать
библиотеку реализующую сборку мусора по любому алгоритму и затем "попросить" выкатить
поддержку этой библиотеки на стороне компилятора в виде расширений. Как например
реализованы OpenMp и Cilk. Хотя в случае открытых компиляторов можно и самостоятельно
запилить расширение. Покрайней мере gcc обещались что они наведут порядок в интерфейсах
и механизмах реализации расширений сторонними разработчиками.

#656
23:55, 25 июля 2017

exchg
> Всегда приятно послушать экспертов. ))))
Так я и спрашивал, расскажие, как это возможно. Я не эксперт, я пока вижу, что это не возможно.

> По ссылке выше лежат исходники GC который используется в
> реализации моно.
Исходники пока еще не изучал, но это именно GC для C++? Или же это GC, написанный на C++ для использования в C#? Если второе - то это незачет.

#657
0:00, 26 июля 2017

MrShoor
> Так я и спрашивал, расскажие, как это возможно. Я не эксперт, я пока вижу, что
> это не возможно.
Да я в шутку.

MrShoor
> но это именно GC для C++? Или же это GC, написанный на C++ для использования в
> C#? Если второе - то это незачет.

Забыл дать ссылку на сайт - http://www.hboehm.info/gc/

The Boehm-Demers-Weiser conservative garbage collector can be used as a garbage collecting replacement for
C malloc or C++ new. It allows you to allocate memory basically as you normally would, without explicitly deallocating
memory that is no longer useful. The collector automatically recycles memory when it determines that it can no longer
be otherwise accessed.

#658
0:01, 26 июля 2017

kipar
> Просто сканирует всю выделенную память(*) в поисках указателей, если на
> какой-то (выделенный маллоком) участок указатель не нашлось - удаляет. Если в
> строке случайно попадутся байты похожие на указатель - так и не сможет удалить.
Звучит как нечто не работающее и протекающее.

exchg
> Кстати его еще и inkscape использует.
Это поэтому inkscape течет дико и крешится постоянно?

#659
0:05, 26 июля 2017

MrShoor
> Это поэтому inkscape течет дико и крешится постоянно?
Не, это они на C# переписывают. И получается как в шутке про джаву. )))

Страницы: 141 42 43 44 45 46 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.