<?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[Speicher wird trotz delete nicht freigegeben]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich stehe momentan etwas auf dem Schlauch.<br />
Wenn ich mit new neue Objekte erzeuge und diese mit delete wieder lösche wird doch der dabei verwendete Speicher wieder freigegeben....oder hab ich das falsch verstanden?</p>
<p>Wenn ich das folgende Programm laufen lasse (unter: Ubuntu 9.04 mit gcc 4.3.3)<br />
wird nach der 2. For-Schleife der Speicher nicht wieder frei gegeben. Das Programm beansprucht nach dem Aufruf von delete genauso viel Speicher wie nach der Allocation mit new.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

#define SIZE 20000000

class tClass
{
public:
	tClass(long c)
	: d(c)
	{};

private:
	long d ;
};

int main()
 {

	std::vector&lt;tClass*&gt; test (SIZE);
	std::string input;

	for(unsigned int i = 0; i &lt; test.size(); i++)
	{
		test[i]= new tClass(i);
	}

	std::cout &lt;&lt; &quot;Memory Allocation ready!&quot; &lt;&lt; std::endl;
	std::cin &gt;&gt; input;

	for(unsigned int i = 0; i &lt; test.size(); i++)
	{
		delete test[i];
	}

	test.clear();
	std::cout &lt;&lt; &quot;Memory DeAllocation ready!&quot; &lt;&lt; std::endl;
	std::cin &gt;&gt; input;

  return 0;
 }
</code></pre>
<p>Hab ich da nur was falsch verstanden....oder sollte da nicht eigentlich der Speicher wieder ans System zurück gegeben werden, genau wie wenn ich unter C mit malloc Speicher anfordere und mit free wieder frei gebe?</p>
<p>Kann da jemand Licht ins Dunkle bringen?</p>
<p>Danke für eure Hilfe,<br />
StarTraveler</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247811/speicher-wird-trotz-delete-nicht-freigegeben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 11:02:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247811.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Aug 2009 22:40:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicher wird trotz delete nicht freigegeben on Sat, 15 Aug 2009 22:40:33 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich stehe momentan etwas auf dem Schlauch.<br />
Wenn ich mit new neue Objekte erzeuge und diese mit delete wieder lösche wird doch der dabei verwendete Speicher wieder freigegeben....oder hab ich das falsch verstanden?</p>
<p>Wenn ich das folgende Programm laufen lasse (unter: Ubuntu 9.04 mit gcc 4.3.3)<br />
wird nach der 2. For-Schleife der Speicher nicht wieder frei gegeben. Das Programm beansprucht nach dem Aufruf von delete genauso viel Speicher wie nach der Allocation mit new.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

#define SIZE 20000000

class tClass
{
public:
	tClass(long c)
	: d(c)
	{};

private:
	long d ;
};

int main()
 {

	std::vector&lt;tClass*&gt; test (SIZE);
	std::string input;

	for(unsigned int i = 0; i &lt; test.size(); i++)
	{
		test[i]= new tClass(i);
	}

	std::cout &lt;&lt; &quot;Memory Allocation ready!&quot; &lt;&lt; std::endl;
	std::cin &gt;&gt; input;

	for(unsigned int i = 0; i &lt; test.size(); i++)
	{
		delete test[i];
	}

	test.clear();
	std::cout &lt;&lt; &quot;Memory DeAllocation ready!&quot; &lt;&lt; std::endl;
	std::cin &gt;&gt; input;

  return 0;
 }
</code></pre>
<p>Hab ich da nur was falsch verstanden....oder sollte da nicht eigentlich der Speicher wieder ans System zurück gegeben werden, genau wie wenn ich unter C mit malloc Speicher anfordere und mit free wieder frei gebe?</p>
<p>Kann da jemand Licht ins Dunkle bringen?</p>
<p>Danke für eure Hilfe,<br />
StarTraveler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761544</guid><dc:creator><![CDATA[StarTraveler]]></dc:creator><pubDate>Sat, 15 Aug 2009 22:40:33 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher wird trotz delete nicht freigegeben on Sat, 15 Aug 2009 22:49:10 GMT]]></title><description><![CDATA[<p>Also bei mir gibts keine Probleme. Wird alles freigegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761546</guid><dc:creator><![CDATA[Funz0r]]></dc:creator><pubDate>Sat, 15 Aug 2009 22:49:10 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher wird trotz delete nicht freigegeben on Sat, 15 Aug 2009 22:51:25 GMT]]></title><description><![CDATA[<p>StarTraveler schrieb:</p>
<blockquote>
<p>Hallo zusammen,</p>
<p>ich stehe momentan etwas auf dem Schlauch.<br />
Wenn ich mit new neue Objekte erzeuge und diese mit delete wieder lösche wird doch der dabei verwendete Speicher wieder freigegeben....oder hab ich das falsch verstanden?</p>
<p>Wenn ich das folgende Programm laufen lasse (unter: Ubuntu 9.04 mit gcc 4.3.3)<br />
wird nach der 2. For-Schleife der Speicher nicht wieder frei gegeben. Das Programm beansprucht nach dem Aufruf von delete genauso viel Speicher wie nach der Allocation mit new.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

#define SIZE 20000000

class tClass
{
public:
	tClass(long c)
	: d(c)
	{};

private:
	long d ;
};

int main()
 {

	std::vector&lt;tClass*&gt; test (SIZE);
	std::string input;

	for(unsigned int i = 0; i &lt; test.size(); i++)
	{
		test[i]= new tClass(i);
	}

	std::cout &lt;&lt; &quot;Memory Allocation ready!&quot; &lt;&lt; std::endl;
	std::cin &gt;&gt; input;

	for(unsigned int i = 0; i &lt; test.size(); i++)
	{
		delete test[i];
	}

	test.clear();
	std::cout &lt;&lt; &quot;Memory DeAllocation ready!&quot; &lt;&lt; std::endl;
	std::cin &gt;&gt; input;

  return 0;
 }
</code></pre>
<p>Hab ich da nur was falsch verstanden....oder sollte da nicht eigentlich der Speicher wieder ans System zurück gegeben werden, genau wie wenn ich unter C mit malloc Speicher anfordere und mit free wieder frei gebe?</p>
<p>Kann da jemand Licht ins Dunkle bringen?</p>
<p>Danke für eure Hilfe,<br />
StarTraveler</p>
</blockquote>
<p>Der Code scheint mir soweit korrekt. Es kann sein, das es nur so aussieht, als würde so viel Speicher verbraucht werden. Eventuell liegt es an der Linux-Archtiketur, die Speicher anders handhabt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761549</guid><dc:creator><![CDATA[asdasd]]></dc:creator><pubDate>Sat, 15 Aug 2009 22:51:25 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher wird trotz delete nicht freigegeben on Sat, 15 Aug 2009 22:51:39 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#define SIZE 20000000
</code></pre>
<p>*würg* <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>StarTraveler schrieb:</p>
<blockquote>
<p>Hab ich da nur was falsch verstanden....oder sollte da nicht eigentlich der Speicher wieder ans System zurück gegeben werden, genau wie wenn ich unter C mit malloc Speicher anfordere und mit free wieder frei gebe?</p>
</blockquote>
<p>Nicht unmittelbar. Vielleicht brauchst du dreizehn Millisekunden später gerade wieder Speicher, von daher wäre das Zurückgeben etwas unnötig. Du darfst aber davon ausgehen, dass dein Speicher richtig freigegeben wird und in kritischen Fällen (wenn andere Programme dringend Speicher benötigen) auch zur Verfügung steht. Aber grundsätzlich solltest du über TaskManager &amp; Co. nicht zuviel auf das Speicherverhalten deines Programms schliessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761550</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 15 Aug 2009 22:51:39 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher wird trotz delete nicht freigegeben on Sat, 15 Aug 2009 22:54:55 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">#define SIZE 20000000
</code></pre>
</blockquote>
<p>Stroustrup - Makros sind hässlich, dafür gibt´s const.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761551</guid><dc:creator><![CDATA[Mentras]]></dc:creator><pubDate>Sat, 15 Aug 2009 22:54:55 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher wird trotz delete nicht freigegeben on Sat, 15 Aug 2009 22:58:11 GMT]]></title><description><![CDATA[<p>Mentras schrieb:</p>
<blockquote>
<p>Makros sind hässlich</p>
</blockquote>
<p>Nein.</p>
<p>Mentras schrieb:</p>
<blockquote>
<p>dafür gibt´s const.</p>
</blockquote>
<p>Nein.</p>
<p>Bitte etwas genauer und weniger pauschalisierend formulieren. <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="😉"
    /><br />
Makros haben viele Einsatzzwecke, allein schon als Header-Guards und Schalter für bedingte Kompilierung. Für Konstanten sind sie aber tatsächlich relativ ungeeignet, ebenso als Funktionsersatz. Richtig cool werden Makros in Präprozessormetaprogrammierung, aber auch sonst sind sie ab und zu recht praktisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761552</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 15 Aug 2009 22:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher wird trotz delete nicht freigegeben on Sat, 15 Aug 2009 23:05:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#define SIZE 20000000
</code></pre>
<p>jaja, ich weiss <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="😃"
    /> ist nicht schön, sollte auch nur ein Demo sein.</p>
<p>Erstmal danke für eure Antworten. Was mich allerdings irritiert, ist die Tatsache, dass ich unter der selben Umgebung sofort bemerke, wenn ich einen mit malloc allokierten Speicher mit free freigebe. Ich sehe das sofort z.B. mit htop. Im obigen Beispiel ist das aber eben nicht der Fall, deshalb bin ich so verwirrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761553</guid><dc:creator><![CDATA[StarTraveler]]></dc:creator><pubDate>Sat, 15 Aug 2009 23:05:35 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher wird trotz delete nicht freigegeben on Sat, 15 Aug 2009 23:12:11 GMT]]></title><description><![CDATA[<p>StarTraveler schrieb:</p>
<blockquote>
<p>jaja, ich weiss <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="😃"
    /> ist nicht schön, sollte auch nur ein Demo sein.</p>
</blockquote>
<p>Jaja, ist klar. :p<br />
(Wenn du's schon weisst, schreibe doch <code>const int</code> hin, das ist sogar kürzer zu schreiben und erspart nervige Antworten ;))</p>
<p>StarTraveler schrieb:</p>
<blockquote>
<p>Was mich allerdings irritiert, ist die Tatsache, dass ich unter der selben Umgebung sofort bemerke, wenn ich einen mit malloc allokierten Speicher mit free freigebe. Ich sehe das sofort z.B. mit htop. Im obigen Beispiel ist das aber eben nicht der Fall, deshalb bin ich so verwirrt.</p>
</blockquote>
<p><code>operator new/delete</code> und <code>malloc()/free()</code> müssen nicht gleich implementiert sein, sind es normalerweise auch nicht. Soviel ich weiss, ist <code>malloc()</code> eher für grössere Speicherbereiche optimiert, während <code>operator new</code> schnell kleine Blöcke anfordern kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761554</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 15 Aug 2009 23:12:11 GMT</pubDate></item></channel></rss>