Am 18.11.2022 um 20:44 schrieb Flávio Etrusco via fpc-pascal:
Em seg., 14 de nov. de 2022 15:26, Vojtěch Čihák via fpc-pascal
<fpc-pascal@lists.freepascal.org> escreveu:
Hi,
I wrote a generic abstract class - a list based on dynamic array
(i.e. array of T;) and this class can be specialized elsewhere
with any type (records or classes).
Part of the class is sorting. There are more ways how to deliver
*compare function* to sorting method. I can pass it as a parameter
or I can define it as: function Compare(A, B: T): Integer;
virtual; abstract;. But this way the function cannot be inlined.
Question: Is there a way how to *inline* compare function to
sorting method in this general purpose generic abstract class?
Thanks.
PS: The gain is 6-7%.
Hi,
What do you mean by "be inlined"? The 'inline' directive instructs the
compiler (or is it the linker? 😬) to try copying the whole function
inline, also avoiding the call (stack) setup; you can't do this for
this for a general purpose method.
Inlining is done by the compiler, not the linker. Also inlining does
work for methods (at least in general; there are exceptions to this,
e.g. if the method is virtual or uses "inherited"). What it can't be
done with is method pointers (or function pointers).
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal