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

Reply via email to