Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Механизм подсчета ссылок и освобождения объекта / 13 сообщений из 13, страница 1 из 1
16.12.2008, 12:33:53
    #35716827
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
Как происходит автоматическое уничтожение объектов в системах поддерживаюх этот механизм?
Я так понимаю это основано на подсчете ссылок. Если число ссылок равно 0 становится, то объект уничтожается.
Но вот пример:
Код: plaintext
1.
2.
3.
a = new A(); //создали объект типа A и присвоили ссылку на него a. Число ссылок  1 .
a.b = new B(); //аналогично для объект типа B
a.b.a = a; //теперь ссылок на первый объект  2 .
a = NULL; //уменьшаем число ссылок. Если бы было  0 , то уничтожился бы, но у нас  1 
В итоге имеем "зависший" объект, на который уже никак не подействоватьС уважением, Naf
...
Рейтинг: 0 / 0
16.12.2008, 13:16:39
    #35716986
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
в VB6 мы использовали события для разрыва циклической ссылки.
В вашем случае свойства b.a нет, есть b.GetParent(). Получается что ссылка на родителя хранится только внутри методов с ней работающих.
...
Рейтинг: 0 / 0
16.12.2008, 13:18:17
    #35716990
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
Worobjoffв VB6 мы использовали события для разрыва циклической ссылки.
В вашем случае свойства b.a нет, есть b.GetParent(). Получается что ссылка на родителя хранится только внутри методов с ней работающих.
причем тут родитель?
...
Рейтинг: 0 / 0
16.12.2008, 13:43:31
    #35717097
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
Притом что обычно классы неравнозначны в графе объектов. А у вас как?
...
Рейтинг: 0 / 0
16.12.2008, 13:59:07
    #35717167
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
Я решил эту проблему так:

Когда программа ожидает сообщений от Windows, и никакие потоки не используют
эти обьекты:

1) Создаю массив vector<Object*>
2) Я добавляю в массив все глобальные указатели, которые указывают на TForm
или потомков TForm
3) Я добавляю в массив все "созданные" обьекты окон (это TForm)
4) У обьектов в массиве, проверяю все свойства (члены классов). И указатели
которые указывают на
TForm (или потомков TForm), и если их нет в массиве, добавляю их в массив.
5) Если что то было добавлено в 4), то перейти на 4)
6) Удаляю все обьекты, которые не присутствуют в массиве.

Но хочу переделать на более оптимальный вариант.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
16.12.2008, 14:23:41
    #35717270
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
Naf пишет:

> Как происходит автоматическое уничтожение объектов в системах
> поддерживаюх этот механизм?

Вы наверное имели в виду автоматическая сборка ненужной памяти ?
Объекты никто не уничтожает.

> Я так понимаю это основано на подсчете ссылок. Если число ссылок равно 0
> становится, то объект уничтожается.
> Но вот пример:

Далеко не всегда.

> a = new A(); //создали объект типа A и присвоили ссылку на него a. Число ссылок *1*.
> a.b = new B(); //аналогично для объект типа B
> a.b.a = a; //теперь ссылок на первый объект *2*.
> a = NULL; //уменьшаем число ссылок. Если бы было *0*, то уничтожился бы, но у нас *1*
>
> В итоге имеем "зависший" объект, на который уже никак не подействоватьС
> уважением, Naf

Это как раз основной из недостатков подсчёта ссылок - надо разрывать циклические
ссылки.

Некоторые GC просто проходят по графу ссылок и считают эти ссылки. Тогда можно
объекты удалить. Некоторые вообще не используют GC.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
16.12.2008, 14:24:45
    #35717272
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
MasterZiv пишет:

> объекты удалить. Некоторые вообще не используют GC.

Не GC, а подсчёт ссылок. Описался.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
16.12.2008, 16:03:12
    #35717618
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
Кстати, в .NET cборщик мусора умеет такую хрень обнаруживать.
...
Рейтинг: 0 / 0
16.12.2008, 16:16:54
    #35717654
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
Яростный МечКстати, в .NET cборщик мусора умеет такую хрень
обнаруживать

Любой GC правильно работает с циклическими ссылками, иначе это не GC.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
16.12.2008, 16:17:30
    #35717655
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
Яростный Меч,
вот мне и интересно КАК?
...
Рейтинг: 0 / 0
16.12.2008, 16:24:22
    #35717677
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
NafЯростный Меч,
вот мне и интересно КАК?Мне это тоже интересно :)
Вроде у Кнута в 1-м томе (или в 3) что-то было на эту тему. А в общем - алгоритмы над графами, поиск "островков" или что-то вроде этого
...
Рейтинг: 0 / 0
16.12.2008, 16:29:08
    #35717692
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
Алексей Морозов
Яростный МечКстати, в .NET cборщик мусора умеет такую хрень
обнаруживатьЛюбой GC правильно работает с циклическими ссылками, иначе это не GC. Не работали Вы, видимо, с JavaScript :)
(если " некоторые браузеры не могут что-то делать", то "JavaScript не может это что-то делать", за редкими исключениями)
...
Рейтинг: 0 / 0
16.12.2008, 22:15:11
    #35718532
belugin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Механизм подсчета ссылок и освобождения объекта
NafЯростный Меч,
вот мне и интересно КАК?

http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Механизм подсчета ссылок и освобождения объекта / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]