<?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[Konzeptfrage: dynamischer Speicher]]></title><description><![CDATA[<p>Hi,</p>
<p>eines der Mankos an C++ ist sicherlich die dynamische Speicherreservierung und -freigabe. Hier hat man leider zu viel von C übernommen. Andere Sprachen, wie zB Java, bieten mit GC ein anderes Konzept. Leider ist das imo noch schlechter und nur für &quot;faule&quot; Entwickler brauchbar.</p>
<p>Daher meine Frage, wie würdet ihr ein dynamisches Speichermanagement konzipieren?</p>
<p>Mir schwebt da ein ähnlicher Ansatz wie C/C++'s automatischer Speicher vor. Man könnte ein Schlüsselwort oder Typmodifizierer verwenden, ähnlich wie es C++/CLI mit managed Speicher macht, zB:</p>
<pre><code class="language-cpp">foo a(&quot;blubb&quot;); // Objekt a vom Typ foo konstruiert in automatischem Speicher
foo^ b(&quot;blobb&quot;); // Objekt b vom Typ foo konstruiert in dynamischem Speicher
</code></pre>
<p>Und genau wie automatischer Speicher wird dieser am Ende des Scopes freigegeben ohne zusätzlichen Aufwand des Programmierers. Bleibt die Frage, wie man dynamischen Speicher über Scopegrenzen hinweg transferiert ohne zu kopieren. Da hilft wieder die neue Typsignatur:</p>
<pre><code class="language-cpp">foo^ bar()
{
    return ...;
}
</code></pre>
<p>Ein Compiler kann diese als &quot;Referenz&quot; handeln und so optimieren.<br />
Ihr seht schon, es ist also eine Art in die Sprache integrierter auto_ptr.</p>
<p>Welche Ansätze seht ihr? Wie würdet ihr das machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/174652/konzeptfrage-dynamischer-speicher</link><generator>RSS for Node</generator><lastBuildDate>Sun, 05 Jul 2026 21:41:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174652.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 01 Mar 2007 14:57:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Thu, 01 Mar 2007 14:57:47 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>eines der Mankos an C++ ist sicherlich die dynamische Speicherreservierung und -freigabe. Hier hat man leider zu viel von C übernommen. Andere Sprachen, wie zB Java, bieten mit GC ein anderes Konzept. Leider ist das imo noch schlechter und nur für &quot;faule&quot; Entwickler brauchbar.</p>
<p>Daher meine Frage, wie würdet ihr ein dynamisches Speichermanagement konzipieren?</p>
<p>Mir schwebt da ein ähnlicher Ansatz wie C/C++'s automatischer Speicher vor. Man könnte ein Schlüsselwort oder Typmodifizierer verwenden, ähnlich wie es C++/CLI mit managed Speicher macht, zB:</p>
<pre><code class="language-cpp">foo a(&quot;blubb&quot;); // Objekt a vom Typ foo konstruiert in automatischem Speicher
foo^ b(&quot;blobb&quot;); // Objekt b vom Typ foo konstruiert in dynamischem Speicher
</code></pre>
<p>Und genau wie automatischer Speicher wird dieser am Ende des Scopes freigegeben ohne zusätzlichen Aufwand des Programmierers. Bleibt die Frage, wie man dynamischen Speicher über Scopegrenzen hinweg transferiert ohne zu kopieren. Da hilft wieder die neue Typsignatur:</p>
<pre><code class="language-cpp">foo^ bar()
{
    return ...;
}
</code></pre>
<p>Ein Compiler kann diese als &quot;Referenz&quot; handeln und so optimieren.<br />
Ihr seht schon, es ist also eine Art in die Sprache integrierter auto_ptr.</p>
<p>Welche Ansätze seht ihr? Wie würdet ihr das machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237552</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Thu, 01 Mar 2007 14:57:47 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Thu, 01 Mar 2007 15:17:02 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>vorab: Mir ist hier noch nicht ganz klar, welches Problem Du mit Deinem neuen Konzept addressieren möchtest.</p>
<p>Zum Konzept: Wann soll wer dem Compiler mitteilen, dass der Speicher freigegeben werden kann ... oder soll das per reference counting doch automatisiert geschehen ?<br />
Soll man statt eines deletes dann den Scope seiner &quot;P^-Variablen&quot; verlassen (was einem aber nur bedingt weiterhilft ... der Aufgerufene hat evtl. den Pointer weitergereicht) ?</p>
<p>Und wo ist dann der Vorteil ggü. einem GC ?</p>
<p>Insgesamt stelle ich mir das nicht ganz einfach vor, wenn man mit diversen Speicherbereichen (bzw. P^-Vars) gleichzeitig arbeitet, die aber überlappende Lebenszyklen haben....(und ich dachte, gerade für solche Fälle sei doch dynamische Speicherverwaltung konzeptionell wichtig. Wenn es nur um die Speichergröße geht, könnte man dem Compiler einfach erlauben, bestimmte Stackobjekte selbst auf dem Heap zu verwalten)....</p>
<p>hmmm, muß ich nochmal drüber nachdenken.....</p>
<p>Prinzipiell sehe ich die dynamische Speicherverwaltung nicht als per se problematisch. Wenn man sich gegen Speicherlecks wehren möchte, würde es IMO genügen ein &quot;deleteAll()&quot; einzuführen, das der Runtime mitteilt, dass an dieser Stelle kein Heapspeicher mehr erwartet wird....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237557</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 01 Mar 2007 15:17:02 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Thu, 01 Mar 2007 15:22:10 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>eines der Mankos an C++ ist sicherlich die dynamische Speicherreservierung und -freigabe. Hier hat man leider zu viel von C übernommen. Andere Sprachen, wie zB Java, bieten mit GC ein anderes Konzept. Leider ist das imo noch schlechter und nur für &quot;faule&quot; Entwickler brauchbar.</p>
</blockquote>
<p>ein paradebsp zum thema wie beginn ich eine sachlich vernuenftige diskussion?</p>
<p>zum rest, wie war noch mal der unterschied zu diversen refcounted /shared (smart)pointern implementierungen, ausser kurz mal compiler umschreiben/erweitern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237566</guid><dc:creator><![CDATA[daHa]]></dc:creator><pubDate>Thu, 01 Mar 2007 15:22:10 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Thu, 01 Mar 2007 15:35:23 GMT]]></title><description><![CDATA[<p>Also ich verstehe dein Problem nicht. Worauf willst du hinaus? Willst du darüber diskuttieren, was man an C++' dynamischer Speicherverwaltung bessern könnte?<br />
1. Rein vom Backend? Also was passiert zur Laufzeut?<br />
2. Oder willst du die Handhabung für den Programmierer z.B. über neue Features verbessern?</p>
<p>Ich weiß deshalb nicht was du willst, weil es für 1. und 2. schon Lösungen gibt. Es gibt Leute die sich dazu Gedanken gemacht haben und Lösungen anbieten. Für 1. gibts z.B. SmartHeap, welches laut c't-Testbericht bis zu 30 fache (nicht 30%!) Leistungssteigungen bei der Heap-Arbeit bringen kann (durchschnitt liegt bei 2 bis 6 fach, immer noch sehr gut).</p>
<p>Für 2. gibts Smartpointer. Gut, ist jetzt von der Syntax nicht wirklich angenehm, wäre besser wenn man ein ^-Zeichen nehmen könnte. Ich mache mir da mir kurze typedefs, dann wirds angenehmer. Z.B. für Strings habe ich folgendes:</p>
<pre><code class="language-cpp">typedef std::auto_ptr&lt;std::string&gt; string_ptr;
</code></pre>
<p>Damit wird mein Sourcecode trotz des Einsatzes von Smartpointern lesbar. Mit Codevervollständingung ist es sogar angenehmer als noch das ^-Zeichen auf der Tastatur zu suchen.</p>
<p>Wenn dich GC-Technik stört, kann ich dich nicht auf 2009 oder 2010 vertrösten... leider. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1237570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237570</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 01 Mar 2007 15:35:23 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Thu, 01 Mar 2007 16:29:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2813">@groovemaster</a>: Bitte führe doch mal genau aus, wo du bei den vorhandenen Verfahren konkret Nachteile siehst, unabhängig von Syntax. Also ein bisschen über konkrete Programmiersprachen hinaus abstrahiert.</p>
<p>Ich verstehe deine Kritikpunkte nämlich nicht völlig. Heutzutage unterscheidet man bei der Resourcenfreigabe oft zwei Arten:</p>
<p>- Resourcen, die sofort freigegeben werden müssen, wenn sie nicht mehr gebraucht werden. Dazu gehören Socketverbindungen, File-Handles, usw. Hier sehe ich Handlungsbedarf. Meiner Meinung nach decken hier weder C++-style Destruktoren noch try-finally Aktionen den Bedarf wirklich ab, da sie ausschließlich Scope-basiert arbeiten.</p>
<p>- Resourcen, die nur freigegeben werden müssen, wenn Bedarf steht, meistens Speicher. Hier verstehe ich nicht, was du gegen GC hast. GC ist meistens effizienter als deterministische Destruktion, weil viel Speicher auf einmal freigegeben werden kann, dagegen wenn du ein komplexes Objekt oft erzeugst und destruierst, dann wird davon der Destruktor aufgerufen der sowas &quot;nutzloses&quot; macht wie den freien Speicher wieder in die Freispeicherliste einzuhängen. Von davon referenzierten Objekten wird der Destruktor aufgerufen, usw. kann ewig aufwändig sein, vor allem völlig nutzlos wenn du gerade gar keinen Bedarf an Heap-Speicher hast.</p>
<p>Deine Frage zielte jetzt anscheinend nur auf Speicherverwaltung ab, also frage ich mich: wo siehst du bei heutigen modernen GCs dringenden Handlungsbedarf? In real-world Applikationen macht der GC meistens weniger als 1% der Laufzeit aus, während Sachen wie Referenzcounnting, scope-basierte Speicherfreigabe oft viel teurer sind und auch nicht immer hinreichend. GC ist also sicherer, effizienter und einfacher als andere Verfahren die es heute gibt (im allgemeinen Fall).</p>
<p>Trotzdem würde mich dein Vorschlag natürlich auch interessieren. Die Begründung &quot;faul&quot; ist übrigens eher etwas, was für GC spricht. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1237608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237608</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 01 Mar 2007 16:29:00 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Thu, 01 Mar 2007 18:05:24 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>vorab: Mir ist hier noch nicht ganz klar, welches Problem Du mit Deinem neuen Konzept addressieren möchtest.</p>
</blockquote>
<p>Kein konkretes. Mir geht es lediglich darum, wie man grundlegend ein dynamisches Speichermanagement konzipieren könnte, ohne auf bisherige Konzepte Rücksicht nehmen zu müssen, aber trotzdem alle Vorteile zu vereinen ohne die entsprechenden Nachteile.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Zum Konzept: Wann soll wer dem Compiler mitteilen, dass der Speicher freigegeben werden kann ... oder soll das per reference counting doch automatisiert geschehen ?<br />
Soll man statt eines deletes dann den Scope seiner &quot;P^-Variablen&quot; verlassen (was einem aber nur bedingt weiterhilft ... der Aufgerufene hat evtl. den Pointer weitergereicht) ?</p>
<p>Und wo ist dann der Vorteil ggü. einem GC ?</p>
</blockquote>
<p>Darum geht es ja eben. Die Antworten darauf kann ich dir nicht geben, deshalb wollte ich wissen, was ihr für ein gutes Konzept haltet. Oder seit ihr mit den bisherigen wunschlos glücklich?</p>
<p>daHa schrieb:</p>
<blockquote>
<p>ein paradebsp zum thema wie beginn ich eine sachlich vernuenftige diskussion?</p>
</blockquote>
<p>Nein, da hast du was falsch verstanden. Das soll keine Diskussion werden, sondern vielmehr eine Ideensammlung. Wer dieses oder jenes Konzept anpreisen oder darüber ablästern will, zB GC, soll das in einem anderen Thread machen.</p>
<p>Artchi schrieb:</p>
<blockquote>
<p>Also ich verstehe dein Problem nicht. Worauf willst du hinaus? Willst du darüber diskuttieren, was man an C++' dynamischer Speicherverwaltung bessern könnte?<br />
1. Rein vom Backend? Also was passiert zur Laufzeut?<br />
2. Oder willst du die Handhabung für den Programmierer z.B. über neue Features verbessern?</p>
</blockquote>
<p>Nein, ja und ja. Mir geht es zwar nicht konkret um C++, aber man könnte zB eine &quot;fiktive&quot; C++ Sprache erstmal als Orientierung nehmen. Wie würde das dynamische Speicherhandling in &quot;Fiktiv C++&quot; aussehen, wenn es keine Zeiger gäbe? Ich hoffe, du verstehst worauf ich hinaus will. Und dabei geht es mir um Kernfunktionalität der Sprache, und nicht um irgendwelche zusätzlichen Klassen, Bibliotheken oder konkrete Implementationen bzw. den darin benutzten Strategien. Also grob gesagt, wie kann ich in meinem Quellcode den Compiler veranlassen, ein dynamisches Objekt anzulegen bzw. zu zerstören? Und was passiert dabei bzw. mit diesen Objekten hinter den Kulissen?</p>
<p>OK, um es vllt. nochmal etwas zu verdeutlichen. Momentan stören mich beim C++ Speichermanagement folgendes:</p>
<pre><code>- eingeschränkte Funktionalität und aufwändige Syntax beim Erzeugen/Zerstören über new/delete
  - ähh, wie kann man nochmal Arrays bei der Erzeugung initialisieren?
  - wieso muss ich delete [] mitgeben, wenn ich ein Array habe?
    (die Antwort ist mir schon klar, da anhand eines Zeigers nicht festgestellt werden kann, ob Array oder nicht; aber da kommen wir zum nächsten Punkt)
  - wieso werden Zeiger verwendet? ich möchte zB dynamische Objekte genauso einfach und unkompliziert wie automatische verwenden können
- Sicherheitsmängel
  - delete a; delete a; zu schreiben ist kein Problem, die Anwendung ist damit jedoch kaputt
  - vergessene deletes verursachen Speicherleichen
  - ein &quot;unbeabsichtigt&quot; überschriebener Zeiger, der vorher das Ergebnis von new enthielt, hinterlässt ebenfalls Speicherleichen
  - nicht exception-safe
</code></pre>
<p>Mehr fällt mir jetzt erstmal nicht, gibt aber bestimmt noch weitere Sachen.</p>
<p>Zum Thema GC. Den schliesse ich erstmal aus folgenden Gründen aus:</p>
<pre><code>- aufgrund der Unberechenbarkeit von Freigaben nur bedingt geeignet für Real-Time Systeme
- unzureichende Effizienz
  zB wird innerhalb eines Scopes ein dynamisches Objekt angelegt
  sobald der Scope verlassen wird, soll auch dieses Objekt sterben und damit der Speicher freigegeben werden
  ein GC lässt sich hier jedoch unbestimmt viel Zeit mit der Freigabe
</code></pre>
<p>Optimizer schrieb:</p>
<blockquote>
<p>Trotzdem würde mich dein Vorschlag natürlich auch interessieren. Die Begründung &quot;faul&quot; ist übrigens eher etwas, was für GC spricht. <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>
</blockquote>
<p>Ja, das war ja auch nicht negativ gemeint. Programmierer sind grundsätzlich faul, und da ist es gut, wenn man soviel wie möglich Arbeit abgenommen bekommt. Nur ist das momentan der einzige Punkt, den ich bei einem GC positiv bewerten würde. Das soll jetzt aber kein Diskussionsthread zum Thema GC werden. Also zurück zum eigentlichen Thema.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237648</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Thu, 01 Mar 2007 18:05:24 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Thu, 01 Mar 2007 18:17:45 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>- unzureichende Effizienz<br />
zB wird innerhalb eines Scopes ein dynamisches Objekt angelegt<br />
sobald der Scope verlassen wird, soll auch dieses Objekt sterben und damit der Speicher freigegeben werden<br />
ein GC lässt sich hier jedoch unbestimmt viel Zeit mit der Freigabe</p>
</blockquote>
<p>Das erhöht die Effizienz. Wir reden hier ja von Speicherverwaltung, nicht von Socket-Verbindung-Verwaltung. Jedes kleine Fitzel 16B explizit in die Freispeicherliste hundertmal einzutragen anstatt 1mal 1,6 KB freizuräumen ist <strong>langsamer</strong>. Das musst du dir wirklich bewusst machen, wenn du über Speicherverwaltung nachdenkst.</p>
<blockquote>
<p>Also zurück zum eigentlichen Thema.</p>
</blockquote>
<p>Gerne. Kannst du das Thema bitte noch genauer eingrenzen, Speicherverwaltung gehört dazu, aber GC nicht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Ich will mich echt konstruktiv beteiligen, aber mir ist das manches nicht klar. Beschränkst du dich auf nicht-automatische Speicherverwaltung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237653</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 01 Mar 2007 18:17:45 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Thu, 01 Mar 2007 20:47:59 GMT]]></title><description><![CDATA[<p>Optimizer schrieb:</p>
<blockquote>
<p>Deine Frage zielte jetzt anscheinend nur auf Speicherverwaltung ab, also frage ich mich: wo siehst du bei heutigen modernen GCs dringenden Handlungsbedarf? In real-world Applikationen macht der GC meistens weniger als 1% der Laufzeit aus, während Sachen wie Referenzcounnting, scope-basierte Speicherfreigabe oft viel teurer sind und auch nicht immer hinreichend. GC ist also sicherer, effizienter und einfacher als andere Verfahren die es heute gibt (im allgemeinen Fall).</p>
</blockquote>
<p>GCs eignen sich aber nicht dazu kritische Ressourcen freizugeben, da destruieren eben nicht garantiert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237756</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Thu, 01 Mar 2007 20:47:59 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Thu, 01 Mar 2007 21:08:28 GMT]]></title><description><![CDATA[<p>Ja, diese Unterscheidung habe ich weiter oben vorgenommen. Full ack.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237768</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 01 Mar 2007 21:08:28 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 08:44:39 GMT]]></title><description><![CDATA[<p>Optimizer schrieb:</p>
<blockquote>
<p>groovemaster schrieb:</p>
<blockquote>
<p>- unzureichende Effizienz<br />
zB wird innerhalb eines Scopes ein dynamisches Objekt angelegt<br />
sobald der Scope verlassen wird, soll auch dieses Objekt sterben und damit der Speicher freigegeben werden<br />
ein GC lässt sich hier jedoch unbestimmt viel Zeit mit der Freigabe</p>
</blockquote>
<p>Das erhöht die Effizienz. Wir reden hier ja von Speicherverwaltung, nicht von Socket-Verbindung-Verwaltung. Jedes kleine Fitzel 16B explizit in die Freispeicherliste hundertmal einzutragen anstatt 1mal 1,6 KB freizuräumen ist <strong>langsamer</strong>. Das musst du dir wirklich bewusst machen, wenn du über Speicherverwaltung nachdenkst.</p>
</blockquote>
<p>Darüber hinaus kommt hinzu, dass moderne GC-Verfahren grade bei kurzlebigen Objekten (d.h. die nur in einem engen Scope existieren) besonders effektiv sind - Stichwort Generation Scavenging. Heutzutage gibt es wirklich keinen Grund mehr, vor Garbage-Collection angst zu haben. Höchstens man ist auf Echtzeitfähigkeit angewiesen.</p>
<p>tfa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237879</guid><dc:creator><![CDATA[tfa]]></dc:creator><pubDate>Fri, 02 Mar 2007 08:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 09:06:52 GMT]]></title><description><![CDATA[<p>tfa schrieb:</p>
<blockquote>
<p>Optimizer schrieb:</p>
<blockquote>
<p>groovemaster schrieb:</p>
<blockquote>
<p>- unzureichende Effizienz<br />
zB wird innerhalb eines Scopes ein dynamisches Objekt angelegt<br />
sobald der Scope verlassen wird, soll auch dieses Objekt sterben und damit der Speicher freigegeben werden<br />
ein GC lässt sich hier jedoch unbestimmt viel Zeit mit der Freigabe</p>
</blockquote>
<p>Das erhöht die Effizienz. Wir reden hier ja von Speicherverwaltung, nicht von Socket-Verbindung-Verwaltung. Jedes kleine Fitzel 16B explizit in die Freispeicherliste hundertmal einzutragen anstatt 1mal 1,6 KB freizuräumen ist <strong>langsamer</strong>. Das musst du dir wirklich bewusst machen, wenn du über Speicherverwaltung nachdenkst.</p>
</blockquote>
<p>Darüber hinaus kommt hinzu, dass moderne GC-Verfahren grade bei kurzlebigen Objekten (d.h. die nur in einem engen Scope existieren) besonders effektiv sind - Stichwort Generation Scavenging. Heutzutage gibt es wirklich keinen Grund mehr, vor Garbage-Collection angst zu haben. Höchstens man ist auf Echtzeitfähigkeit angewiesen.</p>
<p>tfa</p>
</blockquote>
<p>wobei mir einraetsel ist warum zeugs das sowieso nur in einem bekannten scope exestiert ueberhpt in den gc kommen soll/muss.</p>
<p>wie kanns performatner sein wenn ich eine komponete hab die ueber was nachdenken muss anstatt ohne nachdenken das richtige zu machen?</p>
<p>und das 100x16b vs 1x1,6kb freigeben, woher weis der gc das es durchgaengige speicherbereiche sind die er einfach so als block freigeben kann?<br />
wurde da schon zeit vorverbraten um zu analysieren und organisieren?<br />
und wird diese zeit in der effizienzberechnung nicht beruecksichtigt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237893</guid><dc:creator><![CDATA[daHa]]></dc:creator><pubDate>Fri, 02 Mar 2007 09:06:52 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 09:19:34 GMT]]></title><description><![CDATA[<p>tfa schrieb:</p>
<blockquote>
<p>Darüber hinaus kommt hinzu, dass moderne GC-Verfahren grade bei kurzlebigen Objekten (d.h. die nur in einem engen Scope existieren) besonders effektiv sind - Stichwort Generation Scavenging. Heutzutage gibt es wirklich keinen Grund mehr, vor Garbage-Collection angst zu haben.</p>
</blockquote>
<p>nur wenn man es selbst schon richtig managed, dann ist ein GC nur ueberfluessig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237904</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Fri, 02 Mar 2007 09:19:34 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 09:35:57 GMT]]></title><description><![CDATA[<p>rapso schrieb:</p>
<blockquote>
<p>tfa schrieb:</p>
<blockquote>
<p>Darüber hinaus kommt hinzu, dass moderne GC-Verfahren grade bei kurzlebigen Objekten (d.h. die nur in einem engen Scope existieren) besonders effektiv sind - Stichwort Generation Scavenging. Heutzutage gibt es wirklich keinen Grund mehr, vor Garbage-Collection angst zu haben.</p>
</blockquote>
<p>nur wenn man es selbst schon richtig managed, dann ist ein GC nur ueberfluessig.</p>
</blockquote>
<p>Managt man es denn richtig? Es ist doch grade der Vorteil, dass man mit GC sehr viel weniger selber managen muss. Die eingesparte Zeit kann man prima nutzen, um Software zu entwicklen, statt sich tagelangen Debug-Sessions hinzugeben um Speicherlecks zu finden.<br />
Die Performance-Einbußen durch GC sind meiner Meinung nach auch zu vernachlässigen. Die Steigerung der Entwickler-Performance allerdings ganz und gar nicht.</p>
<p>tfa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237924</guid><dc:creator><![CDATA[tfa]]></dc:creator><pubDate>Fri, 02 Mar 2007 09:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 10:25:52 GMT]]></title><description><![CDATA[<p>daHa schrieb:</p>
<blockquote>
<p>wobei mir einraetsel ist warum zeugs das sowieso nur in einem bekannten scope exestiert ueberhpt in den gc kommen soll/muss.</p>
</blockquote>
<p>Soll/muss keineswegs so sein. Was ich sinnvoll auf den Stack packen kann, sollte ich da auch hintun, GC sollte IMHO kein Ersatz für Stack-Allokationen sein. Es soll ein Ersatz für new ... delete sein, für Auto-Pointer und so stuff.</p>
<blockquote>
<p>und das 100x16b vs 1x1,6kb freigeben, woher weis der gc das es durchgaengige speicherbereiche sind die er einfach so als block freigeben kann?<br />
wurde da schon zeit vorverbraten um zu analysieren und organisieren?<br />
und wird diese zeit in der effizienzberechnung nicht beruecksichtigt?</p>
</blockquote>
<p>Moderne GCs deallokieren Objekte nicht explizit und fassen dann freie Speicherblöcke zusammen. Stattdessen verschieben sie die Objekte die noch gebraucht werden in einen anderen Bereich, der Rest ist dann per Definition wieder freier Speicher. Allokieren geht dann auch deutlich schneller, weil nicht ein freier Speicherblock gesucht wird, denn der freie Speicher ist imer defragmentiert. Man erhöht genauso wie beim Stack einfach den &quot;free space&quot; Pointer.</p>
<p>Du kannst dir mal diesen Artikel ansehen: <a href="http://msdn.microsoft.com/msdnmag/issues/1100/GCI/" rel="nofollow">http://msdn.microsoft.com/msdnmag/issues/1100/GCI/</a><br />
Da ist ein bisschen Wirtschaftler-Geblubber drin wie toll GC ist, aber man gewinnt einen guten Überblick darüber, wie sie funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237951</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 02 Mar 2007 10:25:52 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 12:06:26 GMT]]></title><description><![CDATA[<p>tfa schrieb:</p>
<blockquote>
<p>rapso schrieb:</p>
<blockquote>
<p>tfa schrieb:</p>
<blockquote>
<p>Darüber hinaus kommt hinzu, dass moderne GC-Verfahren grade bei kurzlebigen Objekten (d.h. die nur in einem engen Scope existieren) besonders effektiv sind - Stichwort Generation Scavenging. Heutzutage gibt es wirklich keinen Grund mehr, vor Garbage-Collection angst zu haben.</p>
</blockquote>
<p>nur wenn man es selbst schon richtig managed, dann ist ein GC nur ueberfluessig.</p>
</blockquote>
<p>Managt man es denn richtig? Es ist doch grade der Vorteil, dass man mit GC sehr viel weniger selber managen muss. Die eingesparte Zeit kann man prima nutzen, um Software zu entwicklen, statt sich tagelangen Debug-Sessions hinzugeben um Speicherlecks zu finden.<br />
Die Performance-Einbußen durch GC sind meiner Meinung nach auch zu vernachlässigen. Die Steigerung der Entwickler-Performance allerdings ganz und gar nicht.</p>
<p>tfa</p>
</blockquote>
<p>rapso meint sowas, worauf du nicht eingehst:</p>
<pre><code class="language-cpp">void foo()
{
   std::string str;
}
</code></pre>
<p>Wo muß ich da mehr managen und nachdenken, als wenn ich einen GC hätte? Genau das mache ich, wenn ich ein Objekte anlege, das nur in einem Scope Gültigkeit haben soll. In DEM Fall, ist ein GC in keiner Weise hilfreicher. Und der GC räumt mein str-Objekt auch nicht schneller auf, als wenn der Compiler nur den Stackpointer hoch oder runter zählt.</p>
<p>Klar, wenn ich mit new etwas anlege, halt dynamisch (worum es hier in dem Thread auch geht!!!), kann mir ein GC Zeit beim Entwickeln einsparen. Richtig. Aber das werden wir in C++ auch ab 2009 laut neuen Standard machen können. Da es in diesem Thread aber laut groovemaster nicht speziell um C++ geht, ist das eigentlich auch nebensächlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238021</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 02 Mar 2007 12:06:26 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 12:19:27 GMT]]></title><description><![CDATA[<p>Wie fordert der string gleich nochmal intern seinen Speicher an? Oha, dynamisch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238034</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Fri, 02 Mar 2007 12:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 12:59:32 GMT]]></title><description><![CDATA[<p>Ja und? Was hab ich als Programmierer damit zutun? Ich habe schliesslich auf tfa's Beitrag geantwortet. Dem es rein um den Aufwand für den Programmierer ging: &quot;ohne GC viel mehr Tipparbeit und mehr nachdenken, wenn ich Scopeobjekte habe&quot;... was aber falsch ist. Egal was der String intern macht.</p>
<p>Und falls es um Performance geht: wie kann ein GC generell schneller sein als ein new/delete? Notfalls nimm ich SmartHeap dazu. was aber auch beweist, das ein Heap-Management nur &quot;schlau&quot; implementiert sein muß. Völlig unabhängig ob ich einen GC nehme oder eine Library wie SmartHeap. Ein GC ist schliesslich keine Zauberei, oder doch? Und weiterhin: auch ei GC kann schlecht implemntiert und designed sein. Wer garantiert mir, wenn ich einen GC nehme, das ich auch Perfomancevorteile bekomme? Rein Zufällig mögen die GC von MS gut sein, aber die SUN Java-GC ist z.B. schlechter als der von anderen Java-Implementierern. Auch wenn ich das Weltbild einiger SUN-Fans damit zerstöre...</p>
<p>Artchi</p>
<p>PS: Mist, ich habe jetzt Java mit ins Spiel gebracht. Das wird mir jetzt zum Verhängnis! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1238048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238048</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 02 Mar 2007 12:59:32 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 12:58:50 GMT]]></title><description><![CDATA[<p>Ein GC ist schon nett, da man beim selbst Managen schnell Fehler einhandeln kann. Wobei man zu den Geschwindigkeitsvorteilen die Optimizer aufgezählt hat aber sagen muss, dass dies oft nur die Frage des Allokators/Deallokators ist. Man kann ja auch einen Allokator/Deallokator schreiben, der wie ein moderner GC funktioniert. Der Deallokator sagt einfach nur &quot;der Speicher hier ist zwar noch reserviert aber eigentlich frei&quot; und der Allokator durchsucht diese Liste bevor er neuen Speicher anlegt (oder so ähnlich).</p>
<p>groovemaster schrieb:</p>
<blockquote>
<p>Ihr seht schon, es ist also eine Art in die Sprache integrierter auto_ptr.</p>
</blockquote>
<p>wozu sollte man auto_ptr in die Sprache integrieren, wenn man es genauso gut als Template-Klasse schreiben kann, wie es bisher ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238055</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 02 Mar 2007 12:58:50 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 13:03:45 GMT]]></title><description><![CDATA[<blockquote>
<p>wozu sollte man auto_ptr in die Sprache integrieren, wenn man es genauso gut als Template-Klasse schreiben kann, wie es bisher ist?</p>
</blockquote>
<p>Das Argument vieler ist halt, das alles Buildin sein muß. Egal ob es Sinn macht oder nicht. Genau das werden wir aber in Zukunft in C++ weniger sehen, laut C++ Komitee. Mehr über Libraries und Templates, in die C++-Core nur noch das nötigste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238058</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 02 Mar 2007 13:03:45 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 13:04:36 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>auch ei GC kann schlecht implemntiert und designed sein. Wer garantiert mir, wenn ich einen GC nehme, das ich auch Perfomancevorteile bekomme? Rein Zufällig mögen die GC von MS gut sein, aber die SUN Java-GC ist z.B. schlechter als der von anderen Java-Implementierern. Auch wenn ich das Weltbild einiger SUN-Fans damit zerstöre...</p>
</blockquote>
<p>Einen schlechten GC kann man ja leicht ersetzen (also leicht im Sinne von ich nehme einen besseren GC und packe den dazu und entferne den schlechten, nicht leicht im Sinne von ich schreib mir mal eben einen guten GC ;)). Die manuelle Verwaltung zu ändern dürfte deutlich schwieriger sein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238059</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 02 Mar 2007 13:04:36 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 13:11:42 GMT]]></title><description><![CDATA[<p>Ja, worum geht es denn nun? Um die Manuelle Verwaltung vs. Automatische Verwaltung? Oder um Performance? <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>Wenn es um Performance geht (GC soll schneller sein), sage ich, dann kann ich einfach die Standardlibrary durch eine bessere tauschen (z.B. die SmartHeap nutzt). Hab ich also auch einen Austausch vorgenommen. Muß ich zwar neu kompilieren, interessiert aber den Endanwender nicht, welche Lib ich nutze. Hauptsache das Ding rennt.</p>
<p>Wenn es um den Programmierer geht: spielt das &quot;Austauschen können&quot; des GCs keine Rolle. Entweder ich nimm einen GC oder nicht. Beides kann ich heute machen. Ich kann es manuell machen, ich kann Smartpointer nehmen, oder ich nehme einen GC. Und ab 2009 haben wir eh offiziell einen GC im ISO-C++. Die Diskussion werden wir ab dann hoffentlich hier nicht mehr haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238060</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 02 Mar 2007 13:11:42 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 13:11:26 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>Wobei man zu den Geschwindigkeitsvorteilen die Optimizer aufgezählt hat aber sagen muss, dass dies oft nur die Frage des Allokators/Deallokators ist. Man kann ja auch einen Allokator/Deallokator schreiben, der wie ein moderner GC funktioniert. Der Deallokator sagt einfach nur &quot;der Speicher hier ist zwar noch reserviert aber eigentlich frei&quot; und der Allokator durchsucht diese Liste bevor er neuen Speicher anlegt (oder so ähnlich).</p>
</blockquote>
<p>Hmmm. Ein Grundproblem bleibt aber auch mit eigenen Allokatoren bestehen: Du machst jede Freigabe explizit. Der Allokator kann das natürlich ansammeln und dann größere Bereiche auf einmal freigeben, aber *irgendetwas* machst du immer beim Deallokieren. Ein gescheiter GC dagegen deallokiert nicht.</p>
<p>Artchi schrieb:</p>
<blockquote>
<p>Und falls es um Performance geht: wie kann ein GC generell schneller sein als ein new/delete?</p>
</blockquote>
<p>IEs ist in der Praxis wirklich oft so (ich sag jetzt mal absichtlich nicht &quot;meistens&quot;). Das hat viele Gründe, new muss freien Speicher suchen, delete muss ausgeführt werden (ein guter GC macht kein delete), Speicher kann fragmentieren und schlechte Lokalität haben, es gibt hunderte Gründe, warum ein GC schneller oder langsamer ist. Du wirst natürlich trotzdem immer was konstruieren können, wo eine klassische Heap-Verwaltung geiler ist. In der Praxis ist er aber oft schneller. Ein eigener Allokator kann wieder noch besser sein, aber darauf hast du doch auch eher selten Lust.</p>
<blockquote>
<p>aber die SUN Java-GC ist z.B. schlechter als der von anderen Java-Implementierern</p>
</blockquote>
<p>Der ist wirklich grottig, hat Pause-Times im Zehntelsekunden-Bereich, da schaudert's mich echt. Die, die am meisten rumlabern, bauen echt den schlechtesten. <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/1238061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238061</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 02 Mar 2007 13:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 13:13:54 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Und ab 2009 haben wir eh offiziell einen GC im ISO-C++. Die Diskussion werden wir ab dann hoffentlich hier nicht mehr haben.</p>
</blockquote>
<p>Was glaubst du, wie die dann erst losgeht. <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="😃"
    /> &quot;soll ich ihn verwenden oder nicht?&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238063</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 02 Mar 2007 13:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 13:18:38 GMT]]></title><description><![CDATA[<p>GCs sind doch im Prinzip schneller, weil sie Arbeit verschieben können und weil sie leicht den Heap aufräumen können. Aber das ist auch mit anderen Allokatoren möglich.</p>
<p>@Optimizer<br />
dieses irgend was ist aber vermutlich nicht der Rede wert. Wenn doch, dann kann man bei der manuellen Verwaltung die Freigabe ja einfach auf einen günstigeren Zeitpunkt verlegen. (So wie man den meisten GCs ja auch sagen kann &quot;Nerv getz nich!&quot; ;))</p>
<p>Artchi schrieb:</p>
<blockquote>
<p>Ja, worum geht es denn nun? Um die Manuelle Verwaltung vs. Automatische Verwaltung? Oder um Performance? <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>Wenn es um Performance geht (GC soll schneller sein), sage ich, dann kann ich einfach die Standardlibrary durch eine bessere tauschen (z.B. die SmartHeap nutzt). Hab ich also auch einen Austausch vorgenommen. Muß ich zwar neu kompilieren, interessiert aber den Endanwender nicht, welche Lib ich nutze. Hauptsache das Ding rennt.</p>
</blockquote>
<p>Bei manueller Verwaltung kannst du natürlich die Allokatoren austauschen, aber du kannst nicht einfach die interne Verwaltung umstricken. Das wollte ich eigentlich sagen. Man kann ja teilweise die GCs sogar vor dem starten einer Anwendung wählen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238068</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 02 Mar 2007 13:18:38 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 13:26:02 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>Wenn doch, dann kann man bei der manuellen Verwaltung die Freigabe ja einfach auf einen günstigeren Zeitpunkt verlegen.</p>
</blockquote>
<p>Dann ist dieses Vormerken dieses etwas und spätestens das kannste nicht verlegen. Wie ich sagte, man kann die Deallokationen ansammeln und wird sicherlich auch gemacht. Am Ende steht man aber immer 2 Nachteilen da:<br />
- man muss beim delete *irgendwas* machen<br />
- man muss freie Speicherbereiche wieder zusammenfassen<br />
Man hat viel rumgeforscht an manueller Speicherverwaltung, schon länger als an GCs und da gibt es alle möglichen Tricks. &lt;Troll&gt;Deshalb ist sie überhaupt noch gerade so konkurrenzfähig. <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="😃"
    /> &lt;/Troll&gt;</p>
<p>Der GC hat natürlich auch Arbeit die manuelle Speicherverwaltung nicht hat, zum Beispiel Referenzen ändern und Write-Barriers implementieren. Scheint aber durchaus sehr tragbar zu sein. Vor allem aber kann ich beim GC nahezu beliebig mehr Laufzeit einsparen und dafür mehr Speicher verbrauchen, also eintauschen, das ist schon sehr nett.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238071</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 02 Mar 2007 13:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to Konzeptfrage: dynamischer Speicher on Fri, 02 Mar 2007 13:28:31 GMT]]></title><description><![CDATA[<p>tfa schrieb:</p>
<blockquote>
<p>rapso schrieb:</p>
<blockquote>
<p>tfa schrieb:</p>
<blockquote>
<p>Darüber hinaus kommt hinzu, dass moderne GC-Verfahren grade bei kurzlebigen Objekten (d.h. die nur in einem engen Scope existieren) besonders effektiv sind - Stichwort Generation Scavenging. Heutzutage gibt es wirklich keinen Grund mehr, vor Garbage-Collection angst zu haben.</p>
</blockquote>
<p>nur wenn man es selbst schon richtig managed, dann ist ein GC nur ueberfluessig.</p>
</blockquote>
<p>Managt man es denn richtig?</p>
</blockquote>
<p>Die meisten scheinen dazu unfaehig zu sein. Leuten die soeinen anschein machen empfehle ich auch aus voller ueberzeugung auf Java/C#/VB zu setzen.</p>
<blockquote>
<p>Es ist doch grade der Vorteil, dass man mit GC sehr viel weniger selber managen muss.</p>
</blockquote>
<p>alles hat seinen preis, lange ladezeiten, suboptimale leistung, massig speicherverschwendung, einmal laenger nachdenken oder immer diese kosten in kauf nehmen... aber vielen faellt das garnicht mehr auf, leider.</p>
<blockquote>
<p>Die eingesparte Zeit kann man prima nutzen, um Software zu entwicklen, statt sich tagelangen Debug-Sessions hinzugeben um Speicherlecks zu finden.</p>
</blockquote>
<p>wenn man kontrolle abgibt, hat man weniger ahnung was passiert und dadurch kommen erst die langen debugsessions. es waere unsinnig zu glauben, dass nur weil ein objekt &quot;garbage&quot; ist statt deletet zu werden, dass man sich nicht um sein ableben kuemmern muss, denn resourcenfreigabe usw. muss dann immer noch gemacht werden, was viele programmierer von sprachen mit GC absolut nicht drauf haben ala &quot;das liegt am GC, mein program hat kein Leak, das kann garnicht sein, das passiert nur in C++.&quot;</p>
<blockquote>
<p>Die Performance-Einbußen durch GC sind meiner Meinung nach auch zu vernachlässigen.</p>
</blockquote>
<p>ich finde den imensen speicheranstieg von manchmal 10fach gegenueber dem vorher existierendem tool in anderen sprachen nicht vernachlaessigbar. die manchmal langen ladezeiten bei denen man sich wundert, ob das OS den doppelklick realisiert hat und die starke traegheit der anwendungen sehr uebel.</p>
<blockquote>
<p>Die Steigerung der Entwickler-Performance allerdings ganz und gar nicht.</p>
</blockquote>
<p>die entwicklungsgeschwindigkeit ist nicht trvial zu messen. jemand der mit C# anfaengt ist zu anfang sicherlich viel schneller als jemand der in assembler schreibt, aber sobald man seine sprache beherrscht ist die entwicklungsgeschwindigkeit von jedem individuell und nicht sonderlich von der highlevel-sprache abhaengig, vor allem wenn man sein Hirn oefter trainiert und nicht auf vorgefertigtes setzt, kann mann bessere leistung bringen... ist wie mit dem kopfrechnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238076</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Fri, 02 Mar 2007 13:28:31 GMT</pubDate></item></channel></rss>