
NullSanya
29.08.2018
06:12:22
См?

Ievgenii
29.08.2018
06:12:33
И, конечно, в этих местах немного есть просидание
Сборщик мусора

Google

NullSanya
29.08.2018
06:12:52
А

Ievgenii
29.08.2018
06:13:13
А так скорость та же
Не идентична
Но +/- та же
+ как я понимаю, есть или будут, механизмы, позволяющие реализовать свой сборщик мусора
Вроде эта тема поднималась
По фактуму то это обвертка над выделением памяти. И когда памяти более нет - он начинает бегать по существующей памяти и пытаться понять, какая из этой памяти более не используется
Ну и освобождать ее
Если подавляющее большинство памяти использовать на стеке - то и СМ будет минимум работать

NullSanya
29.08.2018
06:20:24
А я вот думал например для часто используемых объектов пул делать, как рекомендуют для того же юнити, стоит ли оно?

Ievgenii
29.08.2018
06:20:48

NullSanya
29.08.2018
06:21:11
Например?

Google

Ievgenii
29.08.2018
06:21:24
Смотри, у тебя объект имеет структуру:
{
int age
string name
}
Проблем нет
А если такой:
{
int age
string name
User[] children
}
Что делать в этом случаи?
Как ты его будешь чистить?
Выходит я взял, поюзал объект и вернул его
А следующему уже попадется не пустой объект
Вариант: реализовывать метод очистки
В этом случае, имхо, куда проще его удалять и заново создавать

NullSanya
29.08.2018
06:23:45
Можно чистить перед использованием

Ievgenii
29.08.2018
06:23:47
СМ тут особо не будет работать, так как ты его руками сам удалять будешь...
Тут ты попадаешь на очистку объекта, которую должен реализовывать сам
Для каждого объекта

NullSanya
29.08.2018
06:25:16
Ну можно сделать шаблонную функцию

Ievgenii
29.08.2018
06:25:18
А следовательно на реализацию какого-то интерфейса, согласен?

NullSanya
29.08.2018
06:25:26
которая в большинстве случаев справится

Ievgenii
29.08.2018
06:25:33
Смотри

Google

Ievgenii
29.08.2018
06:25:43
Она справится с первым случаем, а со вторым - нет
Т.к. ты не знаешь, эти объекты нужно возвращать в пул или просто удалить

NullSanya
29.08.2018
06:26:09
Ну да
Но можно не интерфейс а атрибут

Ievgenii
29.08.2018
06:26:22
Вот и получается, что там не так просто
UDA?

NullSanya
29.08.2018
06:26:37

Ievgenii
29.08.2018
06:26:46
А что делать с приватными полями?

NullSanya
29.08.2018
06:27:01
а что с ними не так?

Ievgenii
29.08.2018
06:27:11
А как ты их будешь чистить снаружи?
Только внутри
Что нас снова приводит к реализации интерфейса

Ievgenii
29.08.2018
06:27:42
И снова мы туда что угодно уже не запихнем

NullSanya
29.08.2018
06:27:49
Используя шаблонную магию вроде можно достучаться до приват полей

Ievgenii
29.08.2018
06:28:19
Если этот метод будет в этом объекте, а не снаружи
Там реально много проблем
И после я задумался, а стоит ли игра свечь?

NullSanya
29.08.2018
06:28:55
Ну эт да
А я ща посмотрю, можно ли до приват полей достучаться

Ievgenii
29.08.2018
06:29:18
Может проще сделать что-то типа пула, но по факту обвертку над calloc?

Google

NullSanya
29.08.2018
06:29:32
А деструкторы всякие?

Ievgenii
29.08.2018
06:30:00
А они не вызываются разве?
Ну даже если они не вызываются, их же можно вызвать руками? или нет?
Я не в курсе

NullSanya
29.08.2018
06:30:27
Я тоже
там обновлений компилятора не было?

Ievgenii
29.08.2018
06:30:49
Короче я пришел к выводу, что так будет проще
Но тесты и эксперементы еще не делал
НО!
Тут можно выделить реально не хилый кусок памяти

Admin
ERROR: S client not available

Ievgenii
29.08.2018
06:31:19
И использовать его
А если запариться
И добавить анализ и сохранение анализа
В какой-то файл для дальнейшего запуска
То там можно хранить среднее число тех или иных объектов
И, следовательно, на перед предугадывать, сколько же тебе может понадобиться объектов (памяти) под каждый тип объектов
Ну это так, к чему я пришел...

Karbin
29.08.2018
06:33:05
деструктор можно вызвать руками, через destroy. вроде так эта функция сейчас называется

Ievgenii
29.08.2018
06:33:40

Google

Maxim
29.08.2018
06:34:02
в ди нет же деструкторов как таковых

Ievgenii
29.08.2018
06:34:08
А после пометь занимаемую этим объектом память как не нужную...

Maxim
29.08.2018
06:34:39
~this — это финализатор, и при удалении объектов порядок вызова финализаторов не гарантирован

Ievgenii
29.08.2018
06:35:19
В контексте объекта

Maxim
29.08.2018
06:35:34
но порядок не гарантирован

Ievgenii
29.08.2018
06:35:51
Ну сейчас речь идет о работе над одним объектом

Maxim
29.08.2018
06:36:19
если руками не удалять объекты, а положиться на GC, то финализатор вызовется хз когда
и если в объекте ксть переменные, которые тоже являются объектами, в момент вызова финализатора они уже могут быть уничтожены

Ievgenii
29.08.2018
06:36:50

Maxim
29.08.2018
06:37:22
а тут и думать нечего, так оно работает)

Ievgenii
29.08.2018
06:37:45

Maxim
29.08.2018
06:38:11
The garbage collector is not guaranteed to run the destructor for all unreferenced objects. Furthermore, the order in which the garbage collector calls destructors for unreferenced objects is not specified.
https://dlang.org/spec/class.html#destructors прямо на сайте

Ievgenii
29.08.2018
06:38:41
Сам же написал: "unreferenced objects"
А тут ссылка на него есть

Maxim
29.08.2018
06:39:10
да бляха, еще раз повторяю: порядок вызова ~this не гарантирован

Ievgenii
29.08.2018
06:39:35
Для объектов, на которых нет ссылок
Сам же цитату привел
А если ссылка есть - то гарантирован

NullSanya
29.08.2018
06:39:47
Так, к приватным полям доступ получить легко

Ievgenii
29.08.2018
06:39:54
Пока ссылка на него не пропадет - не удалится