<?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[Array komplett löschen?]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich bin an sich mit der Benutzung von dem Befehl delete vertraut doch so richtig verstehe ich folgende Thematik nicht.<br />
Ich habe mir ein kurzes Programm gebastelt wo nicht viel drin ist.<br />
Erstmal der Code:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;Windows.h&gt;

using namespace std;

unsigned int size = 22000;

int main()
{

	cout &lt;&lt; &quot;Start&quot; &lt;&lt; endl;
	Sleep(3000);

	cout &lt;&lt; &quot;Load&quot; &lt;&lt; endl;
	unsigned int** test = new unsigned int*[size];
	for (unsigned int i=0;i&lt;size;i++)
		test[i] = new unsigned int[size];

	Sleep(3000);
	cout &lt;&lt; &quot;Delete&quot; &lt;&lt; endl;

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

	delete[] test;

	Sleep(10000);
	return 0;
}
</code></pre>
<p>Was passiert?<br />
Ich starte das Programm und haben nebenbei immer den Task-Manager auf um die Nutzung des Ram's zu sehen.<br />
Zu Begin ist es weniger als 1 MB Ramverbrauch.<br />
Im nächsten Schritt wird das Array erstellt - das Programm benötigt ungefähr 175 MB Ram.<br />
Im letzten Schritt wird das Array gelöscht und das Programm benötigt noch 7 MB Ram. Aber warum? Warum ist es nicht wieder unter 1 MB? Wo kommen die übrigen 6 MB her?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326929/array-komplett-löschen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 25 May 2026 00:50:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326929.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Jul 2014 20:22:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array komplett löschen? on Mon, 14 Jul 2014 20:22:23 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich bin an sich mit der Benutzung von dem Befehl delete vertraut doch so richtig verstehe ich folgende Thematik nicht.<br />
Ich habe mir ein kurzes Programm gebastelt wo nicht viel drin ist.<br />
Erstmal der Code:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;Windows.h&gt;

using namespace std;

unsigned int size = 22000;

int main()
{

	cout &lt;&lt; &quot;Start&quot; &lt;&lt; endl;
	Sleep(3000);

	cout &lt;&lt; &quot;Load&quot; &lt;&lt; endl;
	unsigned int** test = new unsigned int*[size];
	for (unsigned int i=0;i&lt;size;i++)
		test[i] = new unsigned int[size];

	Sleep(3000);
	cout &lt;&lt; &quot;Delete&quot; &lt;&lt; endl;

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

	delete[] test;

	Sleep(10000);
	return 0;
}
</code></pre>
<p>Was passiert?<br />
Ich starte das Programm und haben nebenbei immer den Task-Manager auf um die Nutzung des Ram's zu sehen.<br />
Zu Begin ist es weniger als 1 MB Ramverbrauch.<br />
Im nächsten Schritt wird das Array erstellt - das Programm benötigt ungefähr 175 MB Ram.<br />
Im letzten Schritt wird das Array gelöscht und das Programm benötigt noch 7 MB Ram. Aber warum? Warum ist es nicht wieder unter 1 MB? Wo kommen die übrigen 6 MB her?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408626</guid><dc:creator><![CDATA[McRam]]></dc:creator><pubDate>Mon, 14 Jul 2014 20:22:23 GMT</pubDate></item><item><title><![CDATA[Reply to Array komplett löschen? on Mon, 14 Jul 2014 20:34:40 GMT]]></title><description><![CDATA[<p>McRam schrieb:</p>
<blockquote>
<p>Was passiert?<br />
Ich starte das Programm und haben nebenbei immer den Task-Manager auf um die Nutzung des Ram's zu sehen.<br />
Zu Begin ist es weniger als 1 MB Ramverbrauch.<br />
Im nächsten Schritt wird das Array erstellt - das Programm benötigt ungefähr 175 MB Ram.<br />
Im letzten Schritt wird das Array gelöscht und das Programm benötigt noch 7 MB Ram. Aber warum? Warum ist es nicht wieder unter 1 MB? Wo kommen die übrigen 6 MB her?</p>
</blockquote>
<p>Wenn du Speicher freigibst, heißt das noch lange nicht, dass die Laufzeitumgebung deines Programms (das heißt der Code, der hinter new/delete sitzt) den Speicher an das Betriebssystem zurück gibt. Das wäre unnötig und ineffizient. Zudem brauchen new und delete auch einen gewissen Platz für ihre eigenen Verwaltungsdaten.<br />
Wenn du dieses Verhalten ändern möchtest (du willst das als Anfänger nicht, dies ist nur als Ausblick gedacht), dann musst du direkt mit deinem Betriebssystem sprechen. C++ gibt dir an vielen Stellen die (relativ) einfache Möglichkeit, deine eigenen Speicherverwaltungsfunktionen zu benutzen.</p>
<p>Und da du offensichtlich Anfänger bist, ein paar Bemerkungen:<br />
-Der Windows-Taskmanager ist nicht gerade ein gutes Tool, um ein Programmverhalten zu analysieren. Es ist für den Laien kaum erkennbar, was da überhaupt <strong>genau</strong> angezeigt wird. Die einfachen Beschreibungen wie &quot;Speicherverbrauch&quot; sind irreführend. Soweit ich weiß, ändert sich sogar bei einigen Windowsversionen, was da genau angezeigt wird, was die Sache noch komplizierter macht.<br />
-Dir ist schon klar, dass das, was du da machst kein 2D-Array ist?<br />
-Dir ist auch klar, dass man das in C++ niemals so machen würde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408627</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 14 Jul 2014 20:34:40 GMT</pubDate></item><item><title><![CDATA[Reply to Array komplett löschen? on Mon, 14 Jul 2014 20:39:09 GMT]]></title><description><![CDATA[<p>&quot;-Dir ist schon klar, dass das, was du da machst kein 2D-Array ist?&quot;<br />
Sondern?</p>
<p>-Dir ist auch klar, dass man das in C++ niemals so machen würde?<br />
Was hat das damit zu tun? Hier gings darum schnell mal was in den Ram zu laden und zu löschen. Das sollte man eigentlich erkennen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408630</guid><dc:creator><![CDATA[McRam]]></dc:creator><pubDate>Mon, 14 Jul 2014 20:39:09 GMT</pubDate></item><item><title><![CDATA[Reply to Array komplett löschen? on Mon, 14 Jul 2014 20:44:36 GMT]]></title><description><![CDATA[<p>McRam schrieb:</p>
<blockquote>
<p>&quot;-Dir ist schon klar, dass das, was du da machst kein 2D-Array ist?&quot;<br />
Sondern?</p>
</blockquote>
<p>Eine Auflistung einzelner Arrays.</p>
<blockquote>
<p>-Dir ist auch klar, dass man das in C++ niemals so machen würde?<br />
Was hat das damit zu tun? Hier gings darum schnell mal was in den Ram zu laden und zu löschen. Das sollte man eigentlich erkennen können.</p>
</blockquote>
<p>Das hat damit zu tun, dass dir wohl offensichtlich nicht klar ist, dass man new/delete und Pointer so nie benutzen würde. Das kann man an deiner Reaktion erkennen. Die Bemerkung hatte den Zweck, dich davon abzuhalten, dir falsche Programmiermuster anzugewöhnen, die du dir später nur schwer wieder abgewöhnen kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408632</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 14 Jul 2014 20:44:36 GMT</pubDate></item><item><title><![CDATA[Reply to Array komplett löschen? on Mon, 14 Jul 2014 21:00:58 GMT]]></title><description><![CDATA[<p>Dann würde ich es noch gerne korrekt sehen wollen, bitte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408634</guid><dc:creator><![CDATA[McRam]]></dc:creator><pubDate>Mon, 14 Jul 2014 21:00:58 GMT</pubDate></item><item><title><![CDATA[Reply to Array komplett löschen? on Mon, 14 Jul 2014 21:02:46 GMT]]></title><description><![CDATA[<p>McRam schrieb:</p>
<blockquote>
<p>Dann würde ich es noch gerne korrekt sehen wollen, bitte.</p>
</blockquote>
<p>Was genau?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408635</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 14 Jul 2014 21:02:46 GMT</pubDate></item><item><title><![CDATA[Reply to Array komplett löschen? on Mon, 14 Jul 2014 21:06:01 GMT]]></title><description><![CDATA[<p>McRam schrieb:</p>
<blockquote>
<p>Dann würde ich es noch gerne korrekt sehen wollen, bitte.</p>
</blockquote>
<p>Da in deinem Beispiel size konstant ist, wäre gar keine Speicherallokation notwendig und es wäre daher korrekt diese nicht anzuwenden.</p>
<p>Wenn man davon ausgeht, dass size nicht konstant ist, dann kann man auf STL Container zurückgreifen. Als relatives simpel soll hier mal std::vector dienen:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;Windows.h&gt;

using namespace std;

unsigned int size = 22000;

int main()
{

    cout &lt;&lt; &quot;Start&quot; &lt;&lt; endl;
    Sleep(3000);

    cout &lt;&lt; &quot;Load&quot; &lt;&lt; endl;

	std::vector&lt;std::vector&lt;unsigned int&gt;&gt; test(size);

   // unsigned int** test = new unsigned int*[size];
    for (unsigned int i=0;i&lt;size;i++)
		test[i].reserve(size);
      //  test[i] = new unsigned int[size];

    Sleep(3000);
    cout &lt;&lt; &quot;Delete&quot; &lt;&lt; endl;

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

    //delete[] test;

    Sleep(10000);
    return 0;
}
</code></pre>
<p>Letztendlich hängt die Entscheidung, ob STL Container und welcher aber vom konkreten Anwendungsgebiet ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408636</guid><dc:creator><![CDATA[sdfsfsdf]]></dc:creator><pubDate>Mon, 14 Jul 2014 21:06:01 GMT</pubDate></item><item><title><![CDATA[Reply to Array komplett löschen? on Mon, 14 Jul 2014 21:07:58 GMT]]></title><description><![CDATA[<pre><code>#include &lt;vector&gt;
#include &lt;chrono&gt;

int main(){
    std::this_thread::sleep_for(std::chrono::milliseconds(3000));
    const unsigned int size = 22000;
    std::vector&lt;unsigned int&gt; v(size * size);
    std::this_thread::sleep_for(std::chrono::milliseconds(10000));
}
</code></pre>
<p>Du hast aber das &quot;Risiko&quot; dass das wegoptimiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408638</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Mon, 14 Jul 2014 21:07:58 GMT</pubDate></item><item><title><![CDATA[Reply to Array komplett löschen? on Wed, 16 Jul 2014 18:24:10 GMT]]></title><description><![CDATA[<p>was macht der sleepbefehl und unter welcher headerdatei findet man ihn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408993</guid><dc:creator><![CDATA[sdfsdff]]></dc:creator><pubDate>Wed, 16 Jul 2014 18:24:10 GMT</pubDate></item><item><title><![CDATA[Reply to Array komplett löschen? on Wed, 16 Jul 2014 18:53:22 GMT]]></title><description><![CDATA[<p>sdfsdff schrieb:</p>
<blockquote>
<p>was macht der sleepbefehl und unter welcher headerdatei findet man ihn?</p>
</blockquote>
<p>Wenn du kein Forum hättest, wie würdest du dir diese Frage selber beantworten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409001</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 16 Jul 2014 18:53:22 GMT</pubDate></item><item><title><![CDATA[Reply to Array komplett löschen? on Wed, 16 Jul 2014 20:29:25 GMT]]></title><description><![CDATA[<p>sdfsdff schrieb:</p>
<blockquote>
<p>was macht der sleepbefehl und unter welcher headerdatei findet man ihn?</p>
</blockquote>
<p><a href="http://lmgtfy.com/?q=std::this_thread::sleep_for" rel="nofollow">Hier</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409019</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Wed, 16 Jul 2014 20:29:25 GMT</pubDate></item></channel></rss>