Re[2]: [fpc-devel] rtti, arrays and performance

vlad vladovich vlad_mail_ru at mail.ru
Sat Oct 7 00:15:37 CEST 2006



-----Original Message-----
From: Michael Van Canneyt <michael at freepascal.org>
To: FPC developers' list <fpc-devel at lists.freepascal.org>
Date: Fri, 6 Oct 2006 22:01:55 +0200 (CEST)
Subject: Re: [fpc-devel] rtti, arrays and performance


> Did you see a change in performance ? Can you give an order of magnitude ?
>

For me Shark profiler shows that 60%-70% of time spent in fpc_finalize (this is on intel core duo, havn't measured on powerpc). After change it shown just a few percents (I do not remember exactly, and it's a little bit hard to measure exactly because this block is performd in a few seconds now). But it's just a mine specific case. I use dynamic arrays heavily there, too much, it would be better to use getmem there and then type cast it as pointer to array. Generally speaking I think that it's not a significant optimization for most of applications. Just it was easer for me to tweak rtl than to change my code :). But anyway - if I have array of integer with a hundreds thousand items call to finalize each item is not really good I think. What if user has record with array inside, and that record has some dynamic variable? as I understand fpc_finalize will try to finalize array too... And as I understand dynamic arrays always finalizing their items.
 
> 
> I think it may be indeed a better idea to see whether the compiler can set a flag in the type info:
> 
> If we change TTypeInfo to
> 
>    TTypeInfo = record
>      Kind : TTypeKind;
>      Finalize : Boolean;
>      Name : ShortString;
>      // here the type data follows as TTypeData record
>    end;
> 
> Then there is no need for a recursive loop (the compiler has already done that...); 
> Only the Finalize field needs to be retrieved. Putting this field in the middle will
> make sure 99,9% of all existing code will still work.
> 

I don't know is this good - perhaps to not break other's code such attribute can be placed before type info record (at offset -1 or -4 from typeinfo pointer:)),so, if somebody relies on current typeinfo format his code will be not broken?



More information about the fpc-devel mailing list