<?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[Wie grefit C++ auf Daten zu die auf dem Stack liegen?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich weiß nicht genau ob dieser Post nicht eher in ein anderes Forum gehört, aber falls ja, bitte einfach verschieben.</p>
<p>Also, soweit ich weiß gilt folgendes.<br />
- Alle Speicherbereiche die man per new anfordert werden auf dem Heap angelegt<br />
- Alle lokalen Variablen und Funktionsargumente werden auf den Stack gepackt</p>
<p>Meine Frage ist nun, wie kann C++ z.B auf. das 20ste Funktionsargument zugreifen.<br />
Es gibt ja nicht soviele Register. Oder trübt mich da mein Wissen über den Stack.<br />
Meiner Meinung nach müsste es ja noch irgendwie alle 19 vorherigen Argumente auslagern bevor es auf das 20ste zugreifen kann.<br />
Wenn es diese 19 anderen auf den Heap auslagern würde, könnte man sie ja direkt dorthin packen.</p>
<p>Ich hoffe es wird ungefähr klar was ich will.</p>
<p>Schonmal vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209601/wie-grefit-c-auf-daten-zu-die-auf-dem-stack-liegen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 16:46:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209601.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Apr 2008 13:34:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie grefit C++ auf Daten zu die auf dem Stack liegen? on Tue, 01 Apr 2008 13:34:04 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich weiß nicht genau ob dieser Post nicht eher in ein anderes Forum gehört, aber falls ja, bitte einfach verschieben.</p>
<p>Also, soweit ich weiß gilt folgendes.<br />
- Alle Speicherbereiche die man per new anfordert werden auf dem Heap angelegt<br />
- Alle lokalen Variablen und Funktionsargumente werden auf den Stack gepackt</p>
<p>Meine Frage ist nun, wie kann C++ z.B auf. das 20ste Funktionsargument zugreifen.<br />
Es gibt ja nicht soviele Register. Oder trübt mich da mein Wissen über den Stack.<br />
Meiner Meinung nach müsste es ja noch irgendwie alle 19 vorherigen Argumente auslagern bevor es auf das 20ste zugreifen kann.<br />
Wenn es diese 19 anderen auf den Heap auslagern würde, könnte man sie ja direkt dorthin packen.</p>
<p>Ich hoffe es wird ungefähr klar was ich will.</p>
<p>Schonmal vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484502</guid><dc:creator><![CDATA[mikrol]]></dc:creator><pubDate>Tue, 01 Apr 2008 13:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wie grefit C++ auf Daten zu die auf dem Stack liegen? on Tue, 01 Apr 2008 13:38:43 GMT]]></title><description><![CDATA[<p>evtl nimmt er die &quot;Objekte&quot; solange aus dem Stack und packt sie wieder oben drauf, bis er das richtige findet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484504</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Tue, 01 Apr 2008 13:38:43 GMT</pubDate></item><item><title><![CDATA[Reply to Wie grefit C++ auf Daten zu die auf dem Stack liegen? on Tue, 01 Apr 2008 13:43:44 GMT]]></title><description><![CDATA[<p>Aber wo packt er sie in der Zwischenzeit hin?<br />
Es gibt ja nicht genügend Register um beispielsweise 19 Argumente wegzupacken?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484507</guid><dc:creator><![CDATA[mikrol]]></dc:creator><pubDate>Tue, 01 Apr 2008 13:43:44 GMT</pubDate></item><item><title><![CDATA[Reply to Wie grefit C++ auf Daten zu die auf dem Stack liegen? on Tue, 01 Apr 2008 13:45:04 GMT]]></title><description><![CDATA[<p>Dein Stack &quot;Wissen&quot; trügt.<br />
Register haben nix mit dem Stack zu tun. Wenn du eine Funktion mit 20 Parametern aufrufst, werden 20 Parameter auf den Stack gepusht und ein Framepointer eingerichtet (ich beziehe mich hier auf eine abstrakte Maschine, um das Prinzip zu verdeutlichen). Wenn da nun etwas steht wie a=b+1;, wobei a und b Parameter sind, dann wird zunächst der Inhalt von b in ein Register geladen (und das geschieht per Adressierung mittels Framepointer), dann die Konstante 1 in ein Register, add ausgeführt und abschließend die Summe vom Zielregister auf den Stack gepusht, der Wert an die Speicherstelle von a geschrieben und der Wert letztendlich vom Stack wieder gepopt.</p>
<p>Der Stack ist im RAM, die Register auf der CPU.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484508</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Tue, 01 Apr 2008 13:45:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wie grefit C++ auf Daten zu die auf dem Stack liegen? on Tue, 01 Apr 2008 13:47:57 GMT]]></title><description><![CDATA[<p>Der Stack und die CPU-Register sind doch zwei verschiedene Dinge. Was hat das eine mit dem anderen zu tun?</p>
<p>Die CPU-Register werden natürlich nur dann genutzt, wenn es &quot;passt&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484511</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Tue, 01 Apr 2008 13:47:57 GMT</pubDate></item><item><title><![CDATA[Reply to Wie grefit C++ auf Daten zu die auf dem Stack liegen? on Tue, 01 Apr 2008 13:50:39 GMT]]></title><description><![CDATA[<p>zwutz schrieb:</p>
<blockquote>
<p>evtl nimmt er die &quot;Objekte&quot; solange aus dem Stack und packt sie wieder oben drauf, bis er das richtige findet</p>
</blockquote>
<p>Wie bitte?</p>
<p>Edit: 1337 Postings;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484512</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Tue, 01 Apr 2008 13:50:39 GMT</pubDate></item><item><title><![CDATA[Reply to Wie grefit C++ auf Daten zu die auf dem Stack liegen? on Tue, 01 Apr 2008 13:53:25 GMT]]></title><description><![CDATA[<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Wie bitte?</p>
</blockquote>
<p>oops.. ich merk grad, dass ich da was verwechselt hab...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484518</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Tue, 01 Apr 2008 13:53:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wie grefit C++ auf Daten zu die auf dem Stack liegen? on Tue, 01 Apr 2008 14:01:09 GMT]]></title><description><![CDATA[<p>Konnte man bei einem Stack nicht immer nur auf das oberste Element zugreifen?<br />
( LIFO-Prinzip )<br />
Ansonsten wäre es ja eher eine Art Array mit Stack Funktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484525</guid><dc:creator><![CDATA[mikrol]]></dc:creator><pubDate>Tue, 01 Apr 2008 14:01:09 GMT</pubDate></item><item><title><![CDATA[Reply to Wie grefit C++ auf Daten zu die auf dem Stack liegen? on Tue, 01 Apr 2008 14:19:12 GMT]]></title><description><![CDATA[<p>Achtung Halbwissen:</p>
<p>Wenn ich mich noch richtig an meine Assembler-Exkursion erinnere, können Werte auf &quot;dem Stack&quot; bei der Parameterübergabe mittels Stackpointer und Basepointer (und ein paar Additionen) adressiert werden.</p>
<p>Pseudo-Assembler:</p>
<pre><code>move register sp to register bp
// Momentaufnahme des Stackpointers wird gesichert, da man ja innerhalb der
//  Funktion auch mal Daten auf den Stack schaufelt.

// Davon ausgehend, dass an sp (StackPointer) die Rücksprungadresse und diese
//  eine Breite von 4 Bytes besitzt, ist sp + 4 die Adresse des ersten Parameters
move *(bp + 4) to register eax

// So kann man dann auch mit den anderen Parametern verfahren
move *(bp + 16) to register ebx

// etc.
</code></pre>
<p>Das ist so Möglich, weil die Breiten (in Bytes) der einzelnen Argumente ja durch die starke Typbindung immer bekannt sind.</p>
<p>Besser Aufgehoben ist das Ganze allerdings wohl in der Assembler-Sektion.</p>
<p>Grüße... Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484541</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Tue, 01 Apr 2008 14:19:12 GMT</pubDate></item><item><title><![CDATA[Reply to Wie grefit C++ auf Daten zu die auf dem Stack liegen? on Tue, 01 Apr 2008 14:25:04 GMT]]></title><description><![CDATA[<p>Wie ihr es jetzt erklärt habt, ist es schlüssig, aber meine Frage ziehlte auf etwas anderes ab.<br />
Wenn ich einen Zeiger auf einen bestimmten Teil eines Stacks habe, wäre das nicht in gewisser Weise ein Hack?<br />
Momentan ist folgendes für mich ein Stack. <a href="http://de.wikipedia.org/wiki/Stapelspeicher" rel="nofollow">http://de.wikipedia.org/wiki/Stapelspeicher</a><br />
Wenn ich nun doch per Zeiger auf andere Elemente zugreife ist es doch nicht mehr ein Stack, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484548</guid><dc:creator><![CDATA[mikrol]]></dc:creator><pubDate>Tue, 01 Apr 2008 14:25:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wie grefit C++ auf Daten zu die auf dem Stack liegen? on Tue, 01 Apr 2008 15:34:20 GMT]]></title><description><![CDATA[<p>Häng Dich nicht am Begriff &quot;Stapel&quot; auf. Der Begriff wird sich sicher durch ein Gedankenexperiment gebildet haben und Menschen neigen nunmal dazu, alles in Schubladen stecken zu wollen (Abstraktion) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Genauso gut, kann man sich die Funktionsweise des &quot;Stacks&quot; erklären, wie wenn man sich den Hauptspeicher als eine Reihe einachsiger Dreiseitenkipper (Schubkarren) vorstellt bei welchen ein Bauarbeiter als &quot;Stackpointer&quot; agiert, der jedes mal &quot;hier&quot; ruft und einen Karre vor oder zurück geht, wenn ich eine Schippe Speiß in die &quot;Stack&quot;-Karre schmeißen oder wieder herausholen will.</p>
<p>Das hindert mich aber nicht daran, diesen einfach zu übergehen und die Karren vollzuladen oder leerzuräumen, die mir gerade am besten gefallen.</p>
<p>Ein &quot;Hack&quot; entsteht nur in Deiner Vorstellung, weil du den Begriff &quot;Stapel&quot; gedanklich zuweit einschränkst.</p>
<p>Grüße... Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484595</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Tue, 01 Apr 2008 15:34:20 GMT</pubDate></item><item><title><![CDATA[Reply to Wie grefit C++ auf Daten zu die auf dem Stack liegen? on Tue, 01 Apr 2008 15:40:50 GMT]]></title><description><![CDATA[<p>bwbg schrieb:</p>
<blockquote>
<p>[...] als eine Reihe einachsiger Dreiseitenkipper (Schubkarren) [...]</p>
</blockquote>
<p>Danke für die Synchronübersetzung - ich hätt's sonst wirklich nicht geschnallt, mit der Scheibtruhe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>cheers, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484600</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 01 Apr 2008 15:40:50 GMT</pubDate></item></channel></rss>