Wurde Funktion geinlined?



  • Kann man irgendwie feststellen ob eine Funktion geinlined wurde, also ob der Compiler meine Empfehlung angenommen hat 🙂



  • Den ASM Code angucken.



  • In der Debug-Version werden Funktionen nicht inline gemacht oder?



  • Ok hab ich schon gemacht. In der Debugversion wird die Funktion immer über call aufgerufen, egal wie klein sie ist. Dann brauch ich wohl einen Disassembler und dann muss ich noch die richtige Stelle rausfinden. 🙄

    Verschiebt mich mal nach Rund um die Programmierung oder Assembler. Danke. 🙄



  • Hallo,
    welchen Compiler verwendest du? Beim VC kannst du z.B. über den Profiler rausfinden ob eine Funktion geinlined wurde. Außerdem gibt's da auch ein __forceinline. Andere Compiler werden wahrscheinlich auch irgendwelche Möglichkeiten bieten.



  • @HumeSikkins:
    Kann der Compiler nicht sogar auch in bestimmten Fällen __forceinline ignorieren. Ich meine das schon einmal gelesen zu haben.



  • Kann der Compiler nicht sogar auch in bestimmten Fällen __forceinline ignorieren. Ich meine das schon einmal gelesen zu haben.

    Wahrscheinlich in der MSDN 🙂

    __forceinline lässt den Compiler nur seine Kosten/Nutzen-Analyse vergessen.
    Gibt es andere Gründe außer der Kosten/Nutzen-Analyse die Gegen das inlinen sprechen, dann ignoriert der Compiler auch das forceinline.
    In der MSDN heißt es:

    You cannot force the compiler to inline a function when conditions other than cost/benefit analysis prevent it. You cannot inline a function if:

    * The function or its caller is compiled with /Ob0 (the default option for debug builds).

    * The function and the caller use different types of exception handling (C++ exception handling in one, structured exception handling in the other).

    * The function has a variable argument list.

    * The function uses inline assembly and is not compiled with /Og, /Ox, /O1, or /O2).

    * Function returns an unwindable object by value and is not compiled with /GX, /EHs, or /EHa).

    * The function receives a copy-constructed object passed by value, when compiled with /GX, /EHs,, or /EHa.

    * The function is recursive and is not accompanied by #pragma(inline_recursion, on). With the pragma, recursive functions can be inlined to a default depth of eight calls. To change the inlining depth, use #pragma(inline_depth, n).

    If the compiler cannot inline a function declared __forceinline, it generates a level 1 warning (4714).



  • Original erstellt von HumeSikkins:
    Wahrscheinlich in der MSDN 🙂

    Gut möglich 🙂 .



  • Original erstellt von <Rollender Ball>:
    Kann man irgendwie feststellen ob eine Funktion geinlined wurde, also ob der Compiler meine Empfehlung angenommen hat 🙂

    da wir uns auf msvc geeinigt haben: jo. einfach auf warning level 4 schalten.
    und auch sehr praktisch ist immer wieder die taste alt+8, wenn man im debugger ist. nötigenfalls strg+10 um reinzugehen.


Anmelden zum Antworten