<?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[Speicherverwaltung]]></title><description><![CDATA[<p>Hallo C++ommunity;</p>
<p>ich habe eine ganz allgemeine Frage zur Speicherverwaltung. Wenn ich ein Objekt anlege, so wird diese ja ,ohne spezielle Deklaration, auf den Stack gelegt. Wo ist aber die Klassenimplementierung resp. die Methodenimplementierung abgespeichert?<br />
Wird dies im Programmspeicher abgelegt, auf dem Heap, oder sons wo?</p>
<p>Vielen Dank für eure Antworten. <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>Das Zebra</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312458/speicherverwaltung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 18:46:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312458.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Jan 2013 13:08:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherverwaltung on Sat, 05 Jan 2013 13:08:16 GMT]]></title><description><![CDATA[<p>Hallo C++ommunity;</p>
<p>ich habe eine ganz allgemeine Frage zur Speicherverwaltung. Wenn ich ein Objekt anlege, so wird diese ja ,ohne spezielle Deklaration, auf den Stack gelegt. Wo ist aber die Klassenimplementierung resp. die Methodenimplementierung abgespeichert?<br />
Wird dies im Programmspeicher abgelegt, auf dem Heap, oder sons wo?</p>
<p>Vielen Dank für eure Antworten. <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>Das Zebra</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2286483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2286483</guid><dc:creator><![CDATA[Zebra]]></dc:creator><pubDate>Sat, 05 Jan 2013 13:08:16 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung on Sat, 05 Jan 2013 13:13:02 GMT]]></title><description><![CDATA[<p>Alle Funktionen, Methoden und Konstanten liegen halt in der .exe, die vom OS (oder sonst irgendeinem Mechanismus) in den Speicher geladen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2286486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2286486</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 05 Jan 2013 13:13:02 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung on Sat, 05 Jan 2013 13:17:12 GMT]]></title><description><![CDATA[<p>Und Memberfunktionen existieren nur einmal, nicht pro Objekt.</p>
<p>Du kannst dir das so vorstellen, dass das Objekt seinen Memberfunktionen per <code>this</code> -Zeiger als Parameter übergeben wird.</p>
<pre><code>void MyClass::function(int x);
// kannst du dir vorstellen als freie Funktion:
void MyClass_function(MyClass* this, int x);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2286490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2286490</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 05 Jan 2013 13:17:12 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung on Sat, 05 Jan 2013 13:23:45 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielen Dank für die Antworten. Doch was ist damit gemeint <em>... liegen in der .exe</em>. Etwa einfach folgendes:<br />
Alle Programmanweisungen liegen in diesem File, und werden dann in den Arbeitsspeicher geladen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a><br />
Danke, für den Tipp. Das hatte ich vorher tatsächlich nie richtig verstanden.</p>
<p>Vielen Dank<br />
Zebra</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2286493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2286493</guid><dc:creator><![CDATA[Zebra]]></dc:creator><pubDate>Sat, 05 Jan 2013 13:23:45 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung on Sat, 05 Jan 2013 14:15:52 GMT]]></title><description><![CDATA[<p>Deine Vermutung ist richtig, der Code wird aus der exe-Datei (oder andere ausführbarem Format) in den Speicher geladen und von dort aus ausgeführt.</p>
<p>Es gibt den Code halt nur einmal pro Klasse, aber Ausnahmen hiervon sind templates. Dabei wird für jeden Typ eine eigen Klasse/Funktion erzeugt, also für std::vector&lt;int&gt; und std::vector<a href="std::string" rel="nofollow">std::string</a> werden die Methoden zweimal erzeugt und getrennt voneinander gespeichert.</p>
<p>Eine andere Ausnahme sind als virtual deklarierte Methoden. Hierbei enthält jede Instanz der Klasse eine Tabelle, in der die Speicheraddressen der Methoden stehen.<br />
Die eigentliche Methoden muss zwar irgendwo implementiert sein, aber welche zu einer Instanz gehört, kann erst zur Laufzeit bestimmt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2286508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2286508</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Sat, 05 Jan 2013 14:15:52 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung on Sat, 05 Jan 2013 15:53:57 GMT]]></title><description><![CDATA[<p>Hallo Marthog,</p>
<p>vielen Dank für deine Antwort <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>Zebra</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2286543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2286543</guid><dc:creator><![CDATA[Zebra]]></dc:creator><pubDate>Sat, 05 Jan 2013 15:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung on Sat, 05 Jan 2013 16:30:53 GMT]]></title><description><![CDATA[<p>Zebra schrieb:</p>
<blockquote>
<p>Hallo Marthog,</p>
<p>vielen Dank für deine Antwort <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>Zebra</p>
</blockquote>
<p>Ich muss jedoch korrigierend eingreifen, da die Antwort etwas ungenau formuliert ist:<br />
1. Templates: Eine wichtige Erkenntnis ist, dass ein Klassentemplate eben keine Klasse ist. Erst eine Instanzierung eines Klassentemplates ist eine richtige Klasse. Wahrscheinlich meintest du (Marthog) das auch so, aber es war etwas ungenau formuliert. Übrigens werden bei der Instanzierung von Klassentemplates auch nur die Methoden instanziert, die tatsächlich benutzt werden.</p>
<p>2. Virtuelle Funktionen: Das <em>kann</em> so implementiert sein, <em>muss</em> es aber nicht. Insbesondere die üblichste Implementierung, virtual method tables, die du wahrscheinlich meinst, funktioniert ein bisschen anders, als du beschreibst:<br />
<a href="http://en.wikipedia.org/wiki/Vtable" rel="nofollow">http://en.wikipedia.org/wiki/Vtable</a><br />
Eine eigene Tabelle pro Instanz wäre dagegen viel zu viel Overhead und ohne jeden Vorteil.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2286552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2286552</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 05 Jan 2013 16:30:53 GMT</pubDate></item></channel></rss>