<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Inline-Optimierungen]]></title><description><![CDATA[<p>Anlässlich eines aktuellen Threades und der Diskussion, die schon oft aufgekommen ist, möchte ich mal Klarheit in diesem Thema.</p>
<p>Inwiefern kann der Compiler gut abschätzen, ob sich das Inlining einer Funktion lohnt? Zählt er Assemblerbefehle innerhalb der Funktion und Anzahl Aufrufe und wägt diese dann ab?</p>
<p>Wie verhält es sich bei Funktionen, die als <code>inline</code> fest im Design verankert sind, indem sie innerhalb von Headerdateien definiert sind? Oder im Gegensatz kurze Get/Set-Methoden, die in CPP-Dateien implementiert sind? Kann der Linker da beliebig manipulieren?</p>
<p>Und ist das Schlüsselwort <code>inline</code> demzufolge wirklich absolut sinnlos bei modernen Compilern?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236407/inline-optimierungen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 13:15:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236407.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Mar 2009 17:01:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Inline-Optimierungen on Sat, 14 Mar 2009 17:01:19 GMT]]></title><description><![CDATA[<p>Anlässlich eines aktuellen Threades und der Diskussion, die schon oft aufgekommen ist, möchte ich mal Klarheit in diesem Thema.</p>
<p>Inwiefern kann der Compiler gut abschätzen, ob sich das Inlining einer Funktion lohnt? Zählt er Assemblerbefehle innerhalb der Funktion und Anzahl Aufrufe und wägt diese dann ab?</p>
<p>Wie verhält es sich bei Funktionen, die als <code>inline</code> fest im Design verankert sind, indem sie innerhalb von Headerdateien definiert sind? Oder im Gegensatz kurze Get/Set-Methoden, die in CPP-Dateien implementiert sind? Kann der Linker da beliebig manipulieren?</p>
<p>Und ist das Schlüsselwort <code>inline</code> demzufolge wirklich absolut sinnlos bei modernen Compilern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679966</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 14 Mar 2009 17:01:19 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierungen on Sat, 14 Mar 2009 17:22:58 GMT]]></title><description><![CDATA[<p>ein interessanter artikel über den MSVC ist hier:</p>
<p><a href="http://msdn.microsoft.com/en-us/library/aa289170(VS.71).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/aa289170(VS.71).aspx</a></p>
<p>hab ihn aber weitestgehend nur überflogen - falls du nach dem Lesen schlauer bist, kannste ja ma was dazu schreiben, wenn du Lust hast ^^</p>
<p>Zur Frage, ob inline sinnlos ist:</p>
<blockquote>
<p>Use the inline threshold switch with great caution.</p>
</blockquote>
<p>Nur leider ergibt der Satz für mich nicht so recht Sinn - hab keine passende Übersetzung für treshold gefunden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /><br />
Und deshalb und weil ich nicht alles gelesen habe, weiß ich also nicht, ob damit das keyword gemeint ist, oder irgend ne Option bzw. nen Schalter...</p>
<blockquote>
<p>Inwiefern kann der Compiler gut abschätzen, ob sich das Inlining einer Funktion lohnt?</p>
</blockquote>
<p>Das hängt mit Sicherheit schon mal davon ab, was man bei Optimization angibt, beim MSVC gibts da min. Code-Größe, max. Speed und &quot;Full optimization&quot; - kein Plan, was er bei full macht - er wird wo einfach nicht mehr alles inlinen - was er bei max. Speed aber bestimmt macht ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679978</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 14 Mar 2009 17:22:58 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierungen on Sat, 14 Mar 2009 17:30:58 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<blockquote>
<p>Inwiefern kann der Compiler gut abschätzen, ob sich das Inlining einer Funktion lohnt?</p>
</blockquote>
<p>Das hängt mit Sicherheit schon mal davon ab, was man bei Optimization angibt, beim MSVC gibts da min. Code-Größe, max. Speed und &quot;Full optimization&quot; - kein Plan, was er bei full macht - er wird wo einfach nicht mehr alles inlinen - was er bei max. Speed aber bestimmt macht ^^</p>
</blockquote>
<p>Inlining kann den Code langsamer machen.</p>
<p>Es ist eine Gratwanderung. Ein Funktionsaufruf kostet eine Menge Code: du musst die register sichern, werte auf den stack pushen und nachher wieder poppen und die register wieder herstellen.</p>
<p>aber inlining produziert mehr code. da ja die ganze funktion hier eingefuegt wird, statt nur der call der funktion. das kann nun mit sich bringen dass wir nicht mehr in den cache passen oder die branch prediction nicht komplett greifen kann. mehr code heisst ja auch: mehr daten die transferiert muessen.</p>
<p>alles inline machen ist also defintiv schlecht.</p>
<p>der compiler tut jetzt einfach gewisse abschaetzungen vornehmen und je nachdem eben sich fuer inline entscheiden oder dagegen. uU wird er eine funktion nur manchmal inlinen und manchmal nicht...</p>
<p>Das inline keyword dagegen gibt es ja nur wegen der ODR und hat keine performance Wirkung. Je nachdem wie gut der Compiler ist - der VC++ kann zB whole program optimization - kann er auch funktionen ueber Uebersetzungseinheiten hinweg inlinen.</p>
<p>prinzipiell immer dem compiler vertrauen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679983</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 14 Mar 2009 17:30:58 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierungen on Sat, 14 Mar 2009 18:26:14 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Das inline keyword dagegen gibt es ja nur wegen der ODR und hat keine performance Wirkung. Je nachdem wie gut der Compiler ist - der VC++ kann zB whole program optimization - kann er auch funktionen ueber Uebersetzungseinheiten hinweg inlinen.</p>
<p>prinzipiell immer dem compiler vertrauen...</p>
</blockquote>
<p>Dh also kurz gesagt das das Keyword inline keinerlei Auswirkung hat, also es egal ist ob ich &quot;inline void myfunc(){};&quot; oder &quot;void myfunc(){};&quot; verwende?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680012</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Sat, 14 Mar 2009 18:26:14 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierungen on Sat, 14 Mar 2009 18:39:17 GMT]]></title><description><![CDATA[<p>Xebov schrieb:</p>
<blockquote>
<p>Dh also kurz gesagt das das Keyword inline keinerlei Auswirkung hat</p>
</blockquote>
<p>Nö. Es legt dem Compiler nahe, die Funktion zu inlinen. Ob er das tut, und ob diese Empfehlung Kriterium für seine Entscheidung ist, bleibt aber ihm überlassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680019</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Sat, 14 Mar 2009 18:39:17 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierungen on Sat, 14 Mar 2009 19:02:29 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>Xebov schrieb:</p>
<blockquote>
<p>Dh also kurz gesagt das das Keyword inline keinerlei Auswirkung hat</p>
</blockquote>
<p>Nö. Es legt dem Compiler nahe, die Funktion zu inlinen. Ob er das tut, und ob diese Empfehlung Kriterium für seine Entscheidung ist, bleibt aber ihm überlassen.</p>
</blockquote>
<p>Ok danke für die Aussage bin bisher imemr davon ausgegangen das inline für den Compiler sehr viel bindender ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680026</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Sat, 14 Mar 2009 19:02:29 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierungen on Sat, 14 Mar 2009 19:09:11 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>Xebov schrieb:</p>
<blockquote>
<p>Dh also kurz gesagt das das Keyword inline keinerlei Auswirkung hat</p>
</blockquote>
<p>Nö. Es legt dem Compiler nahe, die Funktion zu inlinen. Ob er das tut, und ob diese Empfehlung Kriterium für seine Entscheidung ist, bleibt aber ihm überlassen.</p>
</blockquote>
<p>Nur wenn der Compiler dumm ist.<br />
Moderne Compiler verwenden inline nur um zwischen internal und external linkage zu unterscheiden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680028</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 14 Mar 2009 19:09:11 GMT</pubDate></item><item><title><![CDATA[Reply to Inline-Optimierungen on Sat, 14 Mar 2009 19:23:01 GMT]]></title><description><![CDATA[<p>Nur das beobachtbare Verhalten eines Programms ist verbindlich. Optimierungen gehören nicht dazu (Ausnahme sind solche Dinge wie Return-Value Optimization, die beoachtbar sind, und deshalb eigentlich nicht unter Optimierungen im eigentlichen Sinne fallen). Es bleibt also für 'inline' nur die Auswirkung auf die One-Definition-Rule.<br />
Mit einem traditionellen Übersetzungsmodell (d.h. der Compiler erzeugt verschiebbaren Maschinencode in Objektdateien, der Linker bindet diese zu einem ausführbaren Programm zusammen) ist eine Funktion, die in einer anderen Übersetzungseinheit definiert wurde, für den Compiler nicht sichtbar, kann also nicht geinlinet werden. 'inline' ermöglicht es, die Funktion in einem Header zu definieren, so dass sie in jeder ÜE, die sie aufruft, sichtbar ist, und also geinlinet werden kann. Hat man aber ein Übersetzungsmodell, in dem die Aufgaben von Compiler und Linker flexibler verteilt oder verschränkt sind (=&gt; Link-time code generation, Whole program optimization), wird sowas wieder möglich.</p>
<p>Shade, inline-Funktionen haben nicht automatisch internal linkage. Wo hast du das denn her?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680033</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sat, 14 Mar 2009 19:23:01 GMT</pubDate></item></channel></rss>