|
|
|
Механизм подсчета ссылок и освобождения объекта
|
|||
|---|---|---|---|
|
#18+
Как происходит автоматическое уничтожение объектов в системах поддерживаюх этот механизм? Я так понимаю это основано на подсчете ссылок. Если число ссылок равно 0 становится, то объект уничтожается. Но вот пример: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 12:33:53 |
|
||
|
Механизм подсчета ссылок и освобождения объекта
|
|||
|---|---|---|---|
|
#18+
в VB6 мы использовали события для разрыва циклической ссылки. В вашем случае свойства b.a нет, есть b.GetParent(). Получается что ссылка на родителя хранится только внутри методов с ней работающих. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 13:16:39 |
|
||
|
Механизм подсчета ссылок и освобождения объекта
|
|||
|---|---|---|---|
|
#18+
Worobjoffв VB6 мы использовали события для разрыва циклической ссылки. В вашем случае свойства b.a нет, есть b.GetParent(). Получается что ссылка на родителя хранится только внутри методов с ней работающих. причем тут родитель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 13:18:17 |
|
||
|
Механизм подсчета ссылок и освобождения объекта
|
|||
|---|---|---|---|
|
#18+
Притом что обычно классы неравнозначны в графе объектов. А у вас как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 13:43:31 |
|
||
|
Механизм подсчета ссылок и освобождения объекта
|
|||
|---|---|---|---|
|
#18+
Я решил эту проблему так: Когда программа ожидает сообщений от Windows, и никакие потоки не используют эти обьекты: 1) Создаю массив vector<Object*> 2) Я добавляю в массив все глобальные указатели, которые указывают на TForm или потомков TForm 3) Я добавляю в массив все "созданные" обьекты окон (это TForm) 4) У обьектов в массиве, проверяю все свойства (члены классов). И указатели которые указывают на TForm (или потомков TForm), и если их нет в массиве, добавляю их в массив. 5) Если что то было добавлено в 4), то перейти на 4) 6) Удаляю все обьекты, которые не присутствуют в массиве. Но хочу переделать на более оптимальный вариант. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 13:59:07 |
|
||
|
Механизм подсчета ссылок и освобождения объекта
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 14:23:41 |
|
||
|
Механизм подсчета ссылок и освобождения объекта
|
|||
|---|---|---|---|
|
#18+
MasterZiv пишет: > объекты удалить. Некоторые вообще не используют GC. Не GC, а подсчёт ссылок. Описался. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 14:24:45 |
|
||
|
Механизм подсчета ссылок и освобождения объекта
|
|||
|---|---|---|---|
|
#18+
Кстати, в .NET cборщик мусора умеет такую хрень обнаруживать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 16:03:12 |
|
||
|
Механизм подсчета ссылок и освобождения объекта
|
|||
|---|---|---|---|
|
#18+
Яростный МечКстати, в .NET cборщик мусора умеет такую хрень обнаруживать Любой GC правильно работает с циклическими ссылками, иначе это не GC. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 16:16:54 |
|
||
|
Механизм подсчета ссылок и освобождения объекта
|
|||
|---|---|---|---|
|
#18+
Яростный Меч, вот мне и интересно КАК? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 16:17:30 |
|
||
|
Механизм подсчета ссылок и освобождения объекта
|
|||
|---|---|---|---|
|
#18+
NafЯростный Меч, вот мне и интересно КАК?Мне это тоже интересно :) Вроде у Кнута в 1-м томе (или в 3) что-то было на эту тему. А в общем - алгоритмы над графами, поиск "островков" или что-то вроде этого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 16:24:22 |
|
||
|
Механизм подсчета ссылок и освобождения объекта
|
|||
|---|---|---|---|
|
#18+
Алексей Морозов Яростный МечКстати, в .NET cборщик мусора умеет такую хрень обнаруживатьЛюбой GC правильно работает с циклическими ссылками, иначе это не GC. Не работали Вы, видимо, с JavaScript :) (если " некоторые браузеры не могут что-то делать", то "JavaScript не может это что-то делать", за редкими исключениями) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 16:29:08 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=35717167&tid=1344771]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
167ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 462ms |

| 0 / 0 |
