In our previous episode, Sven Barth said:
> No, not multiple roots. If a class is declared as refcounted (and it's 
> parent class is not) then a hidden field is inserted into its list of 
> fields, just as a normal one would, only that it isn't accesible using 
> the "."-operator (because it won't have a valid Pascal identifier). The 
> compiler of course knows the offset at compile time and at runtime the 
> field can be accessed using the class' RTTI which would have a 
> "RefCountOffset" field added (if that offset is < 0 then the object does 
> not support reference counting).

So in summary: the compiler must pass the fieldoffset to the runtime helper,
instead of having one refcounted root with known offset.

> Did anyone till now really complain about the performance impact of 
> reference counting on interfaces? Especially since they are used *so* 
> much in today's OOP designs?

I never really benchmarked it. I never use interfaces in my own abstract
data structure designs, mostly because the existing classes don't, and I
don't like the refcount. (since i usually also need to access the classes as
normal instances)

I did benchmark interfaces in combination with variants as part of a decal
evaluation.  That was, euh, painful.
 
> 
> function Test: TObject;
> begin
>    Result := (TTestClass.Create as IInterface) as TTestClass;
> end;

Hmm. This looks like a (Delphi) faq item to me, how to convert interface back 
to a
class. Usually the answer is IComponentreference (or what it is called), if
this is legal, I wonder why it didn't come up before.
 
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to