On Mon, 10 Jul 2017, Sven Barth via fpc-pascal wrote:

Am 10.07.2017 13:19 schrieb "Michael Van Canneyt" <mich...@freepascal.org>:



On Mon, 10 Jul 2017, Felipe Monteiro de Carvalho wrote:

On Mon, Jul 10, 2017 at 1:08 PM, Michael Van Canneyt
<mich...@freepascal.org> wrote:

The code is definitely not the same. In each case, it was measured.
There is
a 10% performance loss.


I'd love a source on this one. I guess you mean in Free Pascal?


Obviously.

The classes unit can be recompiled to use the fgl (well, that used to be
so)
as a basis. When using the resulting list and stringlist, there was a 10%
performance loss. The main reason - If I recall correctly - was that the
fgl needs to resort to move() operations instead of direct assignments.

The fgl classes don't use Move(), but they have a virtual method that does
the assignment between the specialized parameters that's inherited from the
non-generic parent list type.

home:~/fpc/rtl/objpas> grep -i move fgl.pp

  System.Move(Src^, Dest^, FItemSize);
  System.Move(InternalItems[Index+1]^, ListItem^, (FCount - Index) * FItemSize);
    System.Move(ListItemPtr^, ResultPtr^, FItemSize);
  System.Move(InternalItems[Index1]^, InternalItems[FCapacity]^, FItemSize);
  System.Move(InternalItems[Index2]^, InternalItems[Index1]^, FItemSize);
  System.Move(InternalItems[FCapacity]^, InternalItems[Index2]^, FItemSize);
    System.Move(Result^, (Result+FItemSize)^, (FCount - Index) * FItemSize);
  System.Move(CurItem^, TmpItem^, FItemSize);
  System.Move(Src^, Dest^, MoveCount * FItemSize);
  System.Move(TmpItem^, NewItem^, FItemSize);
  System.Move(psrc^, pdest^, LItemSize);
  System.Move(Src^, Dest^, FKeySize);
  System.Move(Src^, Dest^, FDataSize);

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to