Как организовать reference count для классов по быстрому?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Как организовать reference count для классов по быстрому?

Сообщение Cheb » 03.04.2016 19:12:43

Если кто знает навскидку примеры реализации для mode objfpc + совместимости с fpc 2.6.4. :oops:

Почему не годится TInterfacedObject: он использует InterlockedIncrement, а мне эта убийственно медленная штука - как рыбе зонтик, мне надо для однопоточной системы (или многопоточной, где пулы объектов по любому огорожены критическими секциями, и имеют каждый свой отдельный диспетчер памяти).

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

З.Ы. Это я к тому, чтобы под корень вырезать из своей системы сборщик мусора с его кладбищем.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Как организовать reference count для классов по быстрому

Сообщение скалогрыз » 03.04.2016 19:30:35

Cheb писал(а):Почему не годится TInterfacedObject: он использует InterlockedIncrement, а мне эта убийственно медленная штука - как рыбе зонтик, мне надо для однопоточной системы (или многопоточной, где пулы объектов по любому огорожены критическими секциями, и имеют каждый свой отдельный диспетчер памяти)

сейчас набегут и будут спорить, что критические секции тормознее, чем InterlockedIncrement.

может у hinst-а что-нить есть? не зря же он за ARC объекты ратовал.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Как организовать reference count для классов по быстрому

Сообщение Cheb » 03.04.2016 21:14:49

, что критические секции тормознее, чем InterlockedIncrement.

Но критическая секция передёргивается один раз на тик игрового мира, а InterlockedIncrement - при *каждом* присваивании.

В принципе, может быть, забить? Использовать TInterfacedObject и сосредоточиться на минимизации в т.ч. количества присваиваний?
Заодно на халяву получу потокобезопасность chepersy, коя где-нигде, а пригодится.

Смотрел InterlockedIncrement для ARM - там совсем ужасы, ассемблерный код с ожиданием в цикле.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Как организовать reference count для классов по быстрому

Сообщение sts » 04.04.2016 00:47:11

Ну дык, раз манипуляции с объектом планируются в рамках одного потока, то и не использовать InterlockedIncrement, наваять свой TInterfacedObject. я так делал, правда в делфе
sts
постоялец
 
Сообщения: 411
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Как организовать reference count для классов по быстрому

Сообщение Mirage » 04.04.2016 02:26:15

А я и в FPC это делал. В методах _AddRef() и _Release() можно прописать что угодно, хоть вообще отключить подсчет ссылок.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Как организовать reference count для классов по быстрому

Сообщение Cheb » 04.04.2016 09:15:48

То есть, как я понимаю, НЕ наследуешь от TInterfacedObject, а создаёшь свой class(TObject,IUnknown) , и в ём - собственные _AddRef() и _Release(), и встроенный в компилятор механизм подсчёта ссылок активируется один чёрт?

Или, наоборот, наследовать от TInterfacedObject и тупо переопределить эти методы?
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Как организовать reference count для классов по быстрому

Сообщение sts » 04.04.2016 10:19:45

Cheb писал(а):создаёшь свой class(TObject,IUnknown) , и в ём - собственные _AddRef() и _Release(), и встроенный в компилятор механизм подсчёта ссылок активируется


да

Добавлено спустя 3 минуты 35 секунд:
Re: Как организовать reference count для классов по быстрому?
_AddRef() и _Release() вызываются если переменная типа IInterface (ну или наследники)
sts
постоялец
 
Сообщения: 411
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Как организовать reference count для классов по быстрому

Сообщение Cheb » 04.04.2016 12:17:07

Спасибо :oops:
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru
cron