<?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[Was kommt beim Funktionsaufruf auf den Stack?]]></title><description><![CDATA[<p>Moin Moin!<br />
Ich hab folgenden Code mal auf WinXP mit dem gcc 3.4.4 (Standardkompilation, d.h. keine Optimierungen, kein Profiling, keine Debugging-Symbole) kompiliert und ausgeführt:</p>
<pre><code>#include &lt;stdio.h&gt;

void f(int i)
{
	printf(&quot;%d\n&quot;, i);
	fflush(stdout);
	f(i + 1);
}

int main(void)
{
	f(0);
}
</code></pre>
<p>Der Code stürzt bei Aufruf Nr. 130.190 ab. Laut <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/thread_stack_size.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/thread_stack_size.asp</a> Ist die Stackgroeße bei WinXP 1 MB.<br />
Das würde bedeuten, dass pro Funktionsaufruf 8 Byte verwendet werden (130190 * 8 Byte = ~1017 KB). 4 Byte fuer den Parameter, und ich schaetz mal weitere 4 Byte fuer die Ruecksprungadresse. Nur: muesste nicht auch irgendwo auf dem Stack die Information stehen, wie gross der (fuer diese Funktion lokale) Stack eigetnlich ist? Sonst koennte doch der Stack nicht richtig abgebaut werden (wie kann der Computer wissen, dass er am Ende der Funktion die letzten 8 Byte vom Stack loeschen kann)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168153/was-kommt-beim-funktionsaufruf-auf-den-stack</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Jul 2026 05:22:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168153.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Dec 2006 09:36:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was kommt beim Funktionsaufruf auf den Stack? on Tue, 19 Dec 2006 09:36:56 GMT]]></title><description><![CDATA[<p>Moin Moin!<br />
Ich hab folgenden Code mal auf WinXP mit dem gcc 3.4.4 (Standardkompilation, d.h. keine Optimierungen, kein Profiling, keine Debugging-Symbole) kompiliert und ausgeführt:</p>
<pre><code>#include &lt;stdio.h&gt;

void f(int i)
{
	printf(&quot;%d\n&quot;, i);
	fflush(stdout);
	f(i + 1);
}

int main(void)
{
	f(0);
}
</code></pre>
<p>Der Code stürzt bei Aufruf Nr. 130.190 ab. Laut <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/thread_stack_size.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/thread_stack_size.asp</a> Ist die Stackgroeße bei WinXP 1 MB.<br />
Das würde bedeuten, dass pro Funktionsaufruf 8 Byte verwendet werden (130190 * 8 Byte = ~1017 KB). 4 Byte fuer den Parameter, und ich schaetz mal weitere 4 Byte fuer die Ruecksprungadresse. Nur: muesste nicht auch irgendwo auf dem Stack die Information stehen, wie gross der (fuer diese Funktion lokale) Stack eigetnlich ist? Sonst koennte doch der Stack nicht richtig abgebaut werden (wie kann der Computer wissen, dass er am Ende der Funktion die letzten 8 Byte vom Stack loeschen kann)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194519</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Tue, 19 Dec 2006 09:36:56 GMT</pubDate></item><item><title><![CDATA[Reply to Was kommt beim Funktionsaufruf auf den Stack? on Tue, 19 Dec 2006 09:58:04 GMT]]></title><description><![CDATA[<p>Der Compiler, weiß daß er Code zum popen von 8 Byte generieren muß, weil er zuvor Code zum pushen von 8 Bytes generiert hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194544</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Tue, 19 Dec 2006 09:58:04 GMT</pubDate></item><item><title><![CDATA[Reply to Was kommt beim Funktionsaufruf auf den Stack? on Tue, 19 Dec 2006 10:18:48 GMT]]></title><description><![CDATA[<p>Z2 schrieb:</p>
<blockquote>
<p>Der Compiler, weiß daß er Code zum popen von 8 Byte generieren muß, weil er zuvor Code zum pushen von 8 Bytes generiert hat.</p>
</blockquote>
<p>*Mit Hand auf Stirn klatsch* da hätt ich auch selber draufkommen können <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title="=)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> Thx <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194572</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Tue, 19 Dec 2006 10:18:48 GMT</pubDate></item></channel></rss>