[fpc-pascal] interfaces and smartpointers [was Traits Proposal]

Benito van der Zander benito at benibela.de
Thu Feb 18 00:51:59 CET 2021


On 17.02.21 21:43, Ryan Joseph via fpc-pascal wrote:
> So where is your 10% performance hit coming from then?
>
> on init:
>
> InitInterfacePointers or TInterfacedObject.AfterConstruction?


I benchmarked it years ago, I do not remember the details.

But InitInterfacePointers was bad. Just look at it:

       procedure InitInterfacePointers(objclass: tclass;instance : pointer);

         var
           ovmt: PVmt;
           i: longint;
           intftable: pinterfacetable;
           Res: pinterfaceentry;
         begin
           ovmt := PVmt(objclass);
           while assigned(ovmt) and {$ifdef VER3_0}(ovmt^.vIntfTable <> 
@emptyintf){$else}assigned(ovmt^.vIntfTable){$endif} do
             begin
               intftable:=ovmt^.vIntfTable;
               {$ifdef VER3_0}
               if assigned(intftable) then
               {$endif VER3_0}
               begin
                 i:=intftable^.EntryCount;
Res:=@intftable^.Entries[0];
                 while i>0 do begin
                   if Res^.IType = etStandard then
                     ppointer(@(pbyte(instance)[Res^.IOffset]))^:=
                       pointer(Res^.VTable);
                   inc(Res);
                   dec(i);
                 end;
               end;
               ovmt:=ovmt^.vParent;
             end;
         end;


But reusing objects avoids calling all the functions from create. (but 
reusing is also expensive, besides the memory increase, it needs a free 
list and thread safe handling of the head of the list)


> otherwise, during the wrapper function? As Sven pointed out the ref counting happens with records operators also. ARC is general may just be slow if you implement it everywhere.


The wrapper function was not included in the 10%


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20210218/921008a9/attachment.htm>


More information about the fpc-pascal mailing list