<?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[Resourcenproblem mit std::stringstream]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Frgae zur Verwendung der std::stringstream klasse aus dem C++ Standard.</p>
<p>Ich stelle einen umfangreichen stringstream zusammen (1 MB) und möchte auf den darin enthaltenen std:string zugreifen, da ich eine Library verwende die ein std::string Objekt haben möchte.</p>
<p>Mit der Methode str() des Streams wird jedoch eine Kopie des internen std::string Objekts erstellt und damit noch einmal der gleiche Speicher alokiert. Diese Resourcen-Verschwendung möchte ich umgehen.</p>
<p>Ich habe bisher keine offizielle Möglichkeit gefunden auf das string-Objekt zuzugreifen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Kennt sich jemand mit diesem Thema aus ?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/251426/resourcenproblem-mit-std-stringstream</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Apr 2026 16:11:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/251426.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Oct 2009 08:26:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Mon, 05 Oct 2009 08:26:26 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Frgae zur Verwendung der std::stringstream klasse aus dem C++ Standard.</p>
<p>Ich stelle einen umfangreichen stringstream zusammen (1 MB) und möchte auf den darin enthaltenen std:string zugreifen, da ich eine Library verwende die ein std::string Objekt haben möchte.</p>
<p>Mit der Methode str() des Streams wird jedoch eine Kopie des internen std::string Objekts erstellt und damit noch einmal der gleiche Speicher alokiert. Diese Resourcen-Verschwendung möchte ich umgehen.</p>
<p>Ich habe bisher keine offizielle Möglichkeit gefunden auf das string-Objekt zuzugreifen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Kennt sich jemand mit diesem Thema aus ?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788168</guid><dc:creator><![CDATA[pro_develop]]></dc:creator><pubDate>Mon, 05 Oct 2009 08:26:26 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Mon, 05 Oct 2009 09:40:19 GMT]]></title><description><![CDATA[<p>Bist du dir sicher, das es eine Kopie gibt? Wie hast du das überprüft?<br />
Es steht zwar im Standard drin, das formal eine Kopie zurück gegeben wird (was auch sinnvoll ist, weil man den String nunmal nicht direkt manipulieren darf). Ein moderner Compiler kann aber meistens RVO anwenden und so Kopien vermeiden, wenn möglich und das Ergebnis nicht ungültig macht. Und RVO ist auch im Standard definiert und nicht illegal!</p>
<p>Infos zu RVO:<br />
<a href="http://en.wikipedia.org/wiki/Return_value_optimization" rel="nofollow">http://en.wikipedia.org/wiki/Return_value_optimization</a></p>
<p>Von MS gibts da auch einen RVO-Artikel:<br />
<a href="http://msdn.microsoft.com/en-us/library/ms364057%28VS.80%29.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms364057(VS.80).aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788188</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 05 Oct 2009 09:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Mon, 05 Oct 2009 10:57:59 GMT]]></title><description><![CDATA[<p>Hast du einen speziellen Grund warum du diese veremintliche Ressourcenverschwendung umgehen möchtest, obwohl du keinen offensichtlichen Weg in den Methoden des stringstreams gefunden hast? Verlass dich doch erstmal auf die Optimierungskünste deines Compilers und schau hinterher, wenn du tatsächlich Ressourcenprobleme hast, nach, wo die sind, bevor du versuchst irgendwelche möglichen Optimierungen zu suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788218</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 05 Oct 2009 10:57:59 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Mon, 05 Oct 2009 11:13:30 GMT]]></title><description><![CDATA[<p>pro_develop schrieb:</p>
<blockquote>
<p>Ich habe bisher keine offizielle Möglichkeit gefunden auf das string-Objekt zuzugreifen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
</blockquote>
<p>Dazu muß ich noch mal was speziell anmerken: zur Objektorientierung gehört auch <em>Datenkapselung</em>. Und das was du forderst, widerspricht der Datenkapselung. Es ist somit richtig das es keine direkten Zugriffsmöglichkeiten gibt und &quot;nur&quot; eine Kopie zurück gegeben wird, wenn man an die Rohdaten will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788226</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 05 Oct 2009 11:13:30 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Mon, 05 Oct 2009 11:32:49 GMT]]></title><description><![CDATA[<p>Danke für die vielen und schnellen Antworten <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>
<p>... also so wie ich das unter der Speicherauslastung im Taskmanager gesehen habe wird der Speicher neu alokiert ... es müsste mit str() ja auch der Kopierkonstruktor des std::string Objekts aufgerufen werden ...</p>
<p>der Kommentar mit der Kapselung ist natürlich richtig, aber bei den anderen Streamarten werden ja auch vorhandene Datenquellen in den stream eingebettet ...<br />
bei stringstream ist das jedoch nicht möglich, da dem Konstruktor eine Referenz auf std::string übergeben werden kann, aber intern trotzdem eine Kopie des string-Objekts erstellt wird ...</p>
<p>Kennt sich jemand mit der boost-library aus ? ... gibt es dort etwas brauchbares, das dieses problem gelöst hat ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788233</guid><dc:creator><![CDATA[pro_develop]]></dc:creator><pubDate>Mon, 05 Oct 2009 11:32:49 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Mon, 05 Oct 2009 11:42:32 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1463">@Artchi</a></p>
<p>Ich denke nicht, das RVO in meinem beschriebenen Fall angewendet wird... das std::string objekt hat doch eher eine kleine größe und beinhaltet einen pointer, an dem der alokierte Speicher hängt ... RVO wird doch nur bei großen Objekten einer Klasse verwendet ... oder nicht ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788238</guid><dc:creator><![CDATA[pro_develop]]></dc:creator><pubDate>Mon, 05 Oct 2009 11:42:32 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Mon, 05 Oct 2009 14:33:50 GMT]]></title><description><![CDATA[<p>pro_develop schrieb:</p>
<blockquote>
<p>... also so wie ich das unter der Speicherauslastung im Taskmanager gesehen habe wird der Speicher neu alokiert</p>
</blockquote>
<p>Nur dass der Taskmanager dir nicht direkt wieviel Speicher dein Programm wirklich braucht und noch weniger, was da tatsächlich so viel Speicher verbraucht - er kann dir nur erzählen was dein Betriebssystem den Programm an Speicher zugewiesen hat, und das ist bei weitem nicht das selbe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788313</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 05 Oct 2009 14:33:50 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Mon, 05 Oct 2009 16:31:01 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Es steht zwar im Standard drin, das formal eine Kopie zurück gegeben wird (was auch sinnvoll ist, weil man den String nunmal nicht direkt manipulieren darf). Ein moderner Compiler kann aber meistens RVO anwenden und so Kopien vermeiden, wenn möglich und das Ergebnis nicht ungültig macht. Und RVO ist auch im Standard definiert und nicht illegal!</p>
</blockquote>
<p>RVO könnte hier aber relativ schwierig werden; genauer gesagt ist selbst bei Anwendung von RVO noch eine Konstruktion notwendig. Falls der <code>std::stringstream</code> intern einen <code>std::string</code> speichert, muss er diesen kopieren, da es sich nicht um ein temporäres Objekt handelt. Ansonsten muss ein neuer <code>std::string</code> konstruiert werden. Was wegoptimiert werden kann, ist die unnötige Kopie beim Rückgabewert oder bei der Initialisierung.</p>
<p>pro_develop schrieb:</p>
<blockquote>
<p>RVO wird doch nur bei großen Objekten einer Klasse verwendet ... oder nicht ?</p>
</blockquote>
<p>Mit Grösse hat Return Value Optimization erstmal nichts zu tun. RVO wird oft angewandt, wenn ein temporäres oder funktions-lokales (NRVO) Objekt zurückgegeben wird und die Kopie offensichtlich unnötig ist.</p>
<p>Eine mögliche Lösung für dein Problem: Du kannst den <code>std::string</code> zuerst mit <code>reserve()</code> vorbereiten und anschliessend nach und nach per <code>append()</code> direkt füllen. Dann sparst du dir einen Schritt, nämlich die grosse Kopie von <code>std::stringstream</code> nach <code>std::string</code> . Die kleinen Kopien werden jetzt halt mit <code>append()</code> statt <code>operator&lt;&lt;</code> vollzogen.</p>
<p>Übrigens ist es wahrscheinlich, dass bei der Übergabe an die Bibliotheksfunktion so oder eine Kopie erstellt werden muss. Aber falls die Funktion wirklich für grosse Strings konzipiert ist, warum arbeitet sie mit Objekten? Da wäre ein Zeiger-Herumreichen, im Optimalfall sogar mit Smart Pointers, weitaus günstiger.</p>
<p><em>Edit: Denkfehler, der sich im Nachhinein als falsch herausstellte. <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="😉"
    /></em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788353</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 05 Oct 2009 16:31:01 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Mon, 05 Oct 2009 15:54:30 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>:</p>
<p>okay ... und mit welchen tools bzw. librarys könnte ich das noch besser untersuchen ?</p>
<p>... und stimmst du mir nicht bei der Antwort an Artchi zu ?</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1463">@Artchi</a></p>
<p>Ich denke nicht, das RVO in meinem beschriebenen Fall angewendet wird... das std::string objekt hat doch eher eine kleine größe und beinhaltet einen pointer, an dem der alokierte Speicher hängt ... RVO wird doch nur bei großen Objekten einer Klasse verwendet ... oder nicht ?</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1788356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788356</guid><dc:creator><![CDATA[pro_develop]]></dc:creator><pubDate>Mon, 05 Oct 2009 15:54:30 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Mon, 05 Oct 2009 16:02:23 GMT]]></title><description><![CDATA[<p>...ich habe auch noch geantwortet, für den Fall, dass du das übersehen hast. <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/1788360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788360</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 05 Oct 2009 16:02:23 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Mon, 05 Oct 2009 16:04:19 GMT]]></title><description><![CDATA[<p>Wer sagt denn eigentlich, dass stringstream intern einen std::string verwendet? Er kann da auch ein simples char-Array (passend zu den traits) haben. Dann wird der string erst bei Aufruf von str() erzeugt. Das kann dann natürlich optimiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788361</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 05 Oct 2009 16:04:19 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Mon, 05 Oct 2009 16:31:33 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Dann wird der string erst bei Aufruf von str() erzeugt.</p>
</blockquote>
<p>So wie ich pro_develop verstanden habe, ist das genau sein Problem. Ob man von einem <code>std::string</code> oder <code>char*</code> eine Kopie erstellt, spielt schlussendlich keine so grosse Rolle. Es braucht beides Speicher und Rechenzeit, mit denen er sparsam umgehen wollte. <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>Braunstein schrieb:</p>
<blockquote>
<p>Das kann dann natürlich optimiert werden.</p>
</blockquote>
<p>Optimiert werden können auch hier wieder nur unnötige temporäre Kopien.</p>
<pre><code class="language-cpp">std::stringstream Stream;      // mit 1 MByte füllen
DoSomething(Stream.str());     // kopiert mindestens einmal 1 MByte
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1788368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788368</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 05 Oct 2009 16:31:33 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 09:18:17 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>:</p>
<p>Habe deine umfangreiche Antwort natürlich nicht übersehen <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>
<p>Ich habe mich auch bei den letzten Antworten falsch ausgedrückt ... ich meinte, dass RVO nur bei großen Objekten einer Klasse als Rückgabewert einen effektiven Nutzen haben dürfte... und dass ich nicht glaube, dass die Umsetzung von RVO so komplex ist, dass auch dynamisch alokierte Objekte von RVO gehandelt werden ....</p>
<p>Ich verstehe auch einfach nicht das Prinzip, nach dem der C++ Standard die stringstreams umsetzt ... bei einer Datei oder den E/A-Geräten kann ich doch auch direkt etwas auf dem Bildschirm dazwischen ausgeben ... oder wenn ich auf die datei zugreifen möchte, dann muss ich doch auch nicht erst eine kopie erstellen ... ?</p>
<p>Das mit der Datenkapselung ist schon richtig, aber es könnte doch wenigstens einen offiziellen Weg geben, um an die Adresse des internen string-Objekts zu gelangen um ggf. Zugriff auf die eigentlichen Rohdaten zu bekommen.</p>
<p>Ich finde das einfach nicht durchgängig von der Umsetzung her ... gibt es bei dem C++ Gremium, das den Standard festlegt, soetwas wie ein Verbesserungsvorschlagswesen ? Hat da jemand Kontakte ? <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/1788566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788566</guid><dc:creator><![CDATA[pro_develop]]></dc:creator><pubDate>Tue, 06 Oct 2009 09:18:17 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 09:24:56 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a>:</p>
<p>Ich dachte das ist nur in std::strstream ein char Array ...</p>
<p>In einem Artikel hatte ich gelesen, dass der Standard ein std::string Objekt für std::stringstream verwendet ...</p>
<p>Ist die Info in dem Artikel etwa falsch ???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788570</guid><dc:creator><![CDATA[pro_develop]]></dc:creator><pubDate>Tue, 06 Oct 2009 09:24:56 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 09:37:35 GMT]]></title><description><![CDATA[<p>Wenn ich den Standard richtig lese, ist die interne Representation der Daten in stringstream nicht festgelegt. Es wird lediglich verlangt, dass mit einem basic_string initialisiert werden kann und dass eine Funktion zur Rückgabe eines solchen existiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788576</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 06 Oct 2009 09:37:35 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 09:52:52 GMT]]></title><description><![CDATA[<p>pro_develop! Da hast du etwas falsch verstanden. Nehmen wir mal die Filestreams von C++. Auch dort entstehen natürlich Kopien, der Daten:</p>
<pre><code class="language-cpp">ofstream f(&quot;datei.txt&quot;);
f &lt;&lt; &quot;Hallo&quot;; // landet im Stream-Puffer, ein gekapselter Speicherblock
f.flush(); // eine Kopie des Stream-Puffers landet im Dateisystem (z.B. Festplatte)
</code></pre>
<p>Bei allen Outputstreams schiebst du Daten rein, und die werden am Ende irgendwo als <em>Kopie</em> landen müssen. Gerade wegen der Kopiererei sind die meisten Streams gepuffert! Und ohne Puffer wäre es wohl noch langsamer, weil dann jedes Byte einzeln kopiert werden müsste, anstatt der effizienteren blockweisen Kopie (so groß wie der Puffer halt).</p>
<p>Selbst die Ausgabe mit <code>cout</code> bedingt eine Kopie der Daten auf dem Bildschirmspeicher oder Terminal oder wie auch immer. Wenn durch <code>flush()</code> was in der Konsole oder Festplatte erscheint, ist es vergleichbar mit dem <code>str()</code> .</p>
<p>Das die Streams einen Direktzugriff erlauben, kann ich nicht erkennen. Kannst du vielleicht eine Methode vom <code>fstream</code> nennen?</p>
<p>Zu dem Gremium: das ist die WG21 Group. Und natürlich kann jeder dort seine Vorschläge einreichen (das Gremium bittet sogar darum!). Du kannst sogar an den Meetings persönlich als Zuschauer teilnehmen, die freuen sich wenn es Interessenten gibt. <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="🙂"
    /> Eine Anlaufstelle kann die Newsgroup news://comp.lang.c++.moderated sein, da lesen und schreiben die meisten aus dem Gremium mit.<br />
Tip: <a href="http://magazin.c-plusplus.net/artikel/Der%20CPlusPlus-Standardisierungs-Prozess" rel="nofollow">http://magazin.c-plusplus.net/artikel/Der CPlusPlus-Standardisierungs-Prozess</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788579</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Tue, 06 Oct 2009 09:52:52 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 09:47:34 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>:</p>
<p>Danke für deinen Lösungsvorschlag <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>
<p>... da hab ich zu schnell auf &quot;senden&quot; gedrückt ... ich wollte doch noch auf deinen Lösungsvorschlag eingehen ...</p>
<p>... wenn ich zwischen dem stream und dem string objekt häppchenweise kopiere, dann habe ich doch aber das Problem mit dem allokierten Speicher nicht umgangen ??? ...</p>
<p>wenn meine Datei 100 MB groß wird, dann müsste ich doch mit string.reserve() die ganzen 100 MB allokieren ... oder wie hast du das gemeint ?</p>
<p>und der stream verringert ja auch nicht automatisch seine Größe, wenn ich in kleinen Stücken daraus lese ... ich könnte den stream doch erst zum Schluß dealokieren ... oder ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788584</guid><dc:creator><![CDATA[pro_develop]]></dc:creator><pubDate>Tue, 06 Oct 2009 09:47:34 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 09:56:30 GMT]]></title><description><![CDATA[<p>pro_develop! Warum benutzt du denn <code>stringstream</code> ? Wenn du problemlos <code>string</code> nutzen kannst, war <code>stringstream</code> eh die falsche Klasse. Denn normalerweise erfüllen beide Klassen unterschiedliche Zwecke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788591</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Tue, 06 Oct 2009 09:56:30 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 10:00:09 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1463">@Artchi</a>:</p>
<p>du hast nicht verstanden wie ich das meine <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> ... ich versuch es noch einmal zu erklären ...</p>
<p>wenn du einen File-Stream erzeugst, dann gibst du eine vorhandene, greifbare Datenquelle, also die auf der Platte vorhandene Datei an ... auf diese Rohdaten in der Datei kannst du auch auf anderen Wegen zugreifen ...</p>
<p>Bei den String-Streams kannst du eine vorhandene Datenquelle angeben, auf die ein freier Zugriff existiert ... es wird jedoch intern eine Kopie erstellt und damit geht der Zugriff auf die vom Stream bearbeiteten Daten verloren ... im Gegensatz zu einer Datei ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788593</guid><dc:creator><![CDATA[pro_develop]]></dc:creator><pubDate>Tue, 06 Oct 2009 10:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 10:01:47 GMT]]></title><description><![CDATA[<p>Und im Zweifelsfall kannst du dir immmernoch eine eigene Streamklasse schreiben, die exakt auf deine Anforderungen zugeschnitten ist. <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/1788595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788595</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Tue, 06 Oct 2009 10:01:47 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 10:09:14 GMT]]></title><description><![CDATA[<p>pro_develop schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>:</p>
<p>okay ... und mit welchen tools bzw. librarys könnte ich das noch besser untersuchen ?</p>
</blockquote>
<p>Die Tools heißen allgemein Profiler, mit denen kannst du Performance- und Ressourcenverbrauch untersuchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788597</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 06 Oct 2009 10:09:14 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 11:33:34 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>pro_develop! Warum benutzt du denn <code>stringstream</code> ? Wenn du problemlos <code>string</code> nutzen kannst, war <code>stringstream</code> eh die falsche Klasse. Denn normalerweise erfüllen beide Klassen unterschiedliche Zwecke.</p>
</blockquote>
<p>siehe Anfangsproblematik ... ich generiere einen Stream mit der zur Verfügung stehenden Formatierung der Daten und muss dann einer Bibliotheksmethode eine Referenz auf std::string übergeben ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788640</guid><dc:creator><![CDATA[pro_develop]]></dc:creator><pubDate>Tue, 06 Oct 2009 11:33:34 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 12:05:34 GMT]]></title><description><![CDATA[<p>pro_develop schrieb:</p>
<blockquote>
<p>siehe Anfangsproblematik ... ich generiere einen Stream mit der zur Verfügung stehenden Formatierung der Daten und muss dann einer Bibliotheksmethode eine Referenz auf std::string übergeben ...</p>
</blockquote>
<p>Aha! Also kannst du doch nichts mit <code>string</code> anfangen. Denn zum Formatieren ist <code>string</code> <em>nicht</em> fähig. D.h. du mußt mit einer nicht- <code>string</code> -Klasse erstmal eine Zeichenkette formatieren, richtig? Egal wie du das anstellst, du wirst <code>string</code> dafür nicht nutzen können.</p>
<p>Wie willst du also eine Kopie der formatierten Zeichnkette vermeiden? <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>Dir bleibt nichts anderes übrigig, als einen eigenen stringstream zu implementieren oder Algorithmen (freie Funktionen), und bei der Übergabe des Strings an den Ctor die Endgültige Größe zu kennen:</p>
<pre><code class="language-cpp">// PSEUDO CODE!

class stringstream
{
    std::string &amp;sref; // entscheidender Punkt!

public:
    stringstream(std::string &amp;s) : sref(s) {}

// I/O Operatoren........
};

// ==========================================

int main()
{
 std::string s(10000, ' '); // String wird 10.000 Zeichen enthalten

 stringstream st(s);
 // irgendwas formatieren...

 foo(s);  // fremde Funktion, die einen std::string fordert
}
</code></pre>
<p>Dann würden die Operatoren direkt den <em>referenzierten</em> String manipulieren. Und damit sich das ganze auch rentiert, darf in dem oberen Beispiel der String keine 10.000 Zeichen übersteigen, weil sonst schon eine Kopieraktion im string nötig wäre - die du eigentlich vermeiden willst.</p>
<p>Auch dürfen die Operatoren nur Zeichen im String manipulieren, aber keine zus. hinzufügen, da sonst eine <em>Kopieraktion</em> in <code>string</code> droht.</p>
<p>Also ohne Profiler würde ich da keinen Finger für krumm machen... weil sonst ist alles für die Katz gewesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788650</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Tue, 06 Oct 2009 12:05:34 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 12:45:31 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1463">@Artchi</a>:</p>
<p>ich hab doch nicht gesagt, dass ich etwas mit sring formatieren will ... ??? *verzweifel*</p>
<blockquote>
<p>siehe Anfangsproblematik ... ich generiere einen Stream mit der zur Verfügung stehenden Formatierung der Daten und muss dann einer Bibliotheksmethode eine Referenz auf std::string übergeben ...</p>
</blockquote>
<p>ich schreibe in einer Schleife in den stringstream ...</p>
<pre><code class="language-cpp">hugo &lt;&lt; hex &lt;&lt; var_a &lt;&lt; endl;
</code></pre>
<p>und damit wächst der in std::stringstream enthaltene std::string kontinuierlich an bis er z.B. 100 MB groß ist ...</p>
<p>und dann möchte ich eine Library verwenden, die den std::string parst, ohne beim erzeugen des std::string Objekts eine Speicherbelgung von 200 MB zu benötigen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788679</guid><dc:creator><![CDATA[pro_develop]]></dc:creator><pubDate>Tue, 06 Oct 2009 12:45:31 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 12:55:43 GMT]]></title><description><![CDATA[<p>Also du moechtest 100 MB an Text parsen ... wieviel Buecher das wohl sind? Kann das Parsen nicht in kleine Teile zerlegt werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788680</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 06 Oct 2009 12:55:43 GMT</pubDate></item><item><title><![CDATA[Reply to Resourcenproblem mit std::stringstream on Tue, 06 Oct 2009 13:12:43 GMT]]></title><description><![CDATA[<p>klingt ja stark als ob der op strstream suchen würde...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788692</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 06 Oct 2009 13:12:43 GMT</pubDate></item></channel></rss>