<?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[const char* vs. std::string - Speicher]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>wenn ich folgenden Code habe:</p>
<pre><code>const char* ptxt = &quot;Hello World!&quot;;
const std::string txt(&quot;Hello World!&quot;);
</code></pre>
<p>Hält der char* ja die Adresse auf den C-String &quot;Hello World!&quot;.</p>
<p>Die std::string Klasse hingegen macht eine Kopie [1] und hält den char* auf den neu-allokierten Speicherbereich.</p>
<p>1. Ist dieser Performance-Gedanke bei den heutigen Rechnern noch gerechtfertigt? (Um hierbei eine Kopie-Operation zu sparen?)</p>
<p>2. Gibt es eine Möglichkeit, dass die std::string-Klasse keine Kopie macht, sondern einfach auch auf den festen Speicherbereich zeigt?</p>
<p>Vielen Dank Euch.</p>
<p>Viele Grüße,</p>
<p>Jakob</p>
<p>---<br />
[1]</p>
<pre><code>basic_string( const CharT* s,
              const Allocator&amp; alloc = Allocator() );

5) Constructs the string with the contents initialized with a copy of the null-terminated character string pointed to by s. The length of the string is determined by the first null character. The behavior is undefined if s does not point at an array of at least Traits::length(s)+1 elements of CharT.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/335869/const-char-vs-std-string-speicher</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 00:26:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/335869.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Dec 2015 19:58:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const char* vs. std::string - Speicher on Wed, 16 Dec 2015 19:59:00 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>wenn ich folgenden Code habe:</p>
<pre><code>const char* ptxt = &quot;Hello World!&quot;;
const std::string txt(&quot;Hello World!&quot;);
</code></pre>
<p>Hält der char* ja die Adresse auf den C-String &quot;Hello World!&quot;.</p>
<p>Die std::string Klasse hingegen macht eine Kopie [1] und hält den char* auf den neu-allokierten Speicherbereich.</p>
<p>1. Ist dieser Performance-Gedanke bei den heutigen Rechnern noch gerechtfertigt? (Um hierbei eine Kopie-Operation zu sparen?)</p>
<p>2. Gibt es eine Möglichkeit, dass die std::string-Klasse keine Kopie macht, sondern einfach auch auf den festen Speicherbereich zeigt?</p>
<p>Vielen Dank Euch.</p>
<p>Viele Grüße,</p>
<p>Jakob</p>
<p>---<br />
[1]</p>
<pre><code>basic_string( const CharT* s,
              const Allocator&amp; alloc = Allocator() );

5) Constructs the string with the contents initialized with a copy of the null-terminated character string pointed to by s. The length of the string is determined by the first null character. The behavior is undefined if s does not point at an array of at least Traits::length(s)+1 elements of CharT.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2479790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479790</guid><dc:creator><![CDATA[__jb__]]></dc:creator><pubDate>Wed, 16 Dec 2015 19:59:00 GMT</pubDate></item><item><title><![CDATA[Reply to const char* vs. std::string - Speicher on Wed, 16 Dec 2015 20:16:41 GMT]]></title><description><![CDATA[<p>Mittlerweile ist es wohl üblich, dass so kurze Strings ohne Heapspeicher im std::string abgelegt werden.</p>
<p>Wenn du jetzt nicht mehrere MB an Textkonstanten anlegen willst, würde ich mir darüber keine Gedanken machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479793</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 16 Dec 2015 20:16:41 GMT</pubDate></item><item><title><![CDATA[Reply to const char* vs. std::string - Speicher on Wed, 16 Dec 2015 20:30:18 GMT]]></title><description><![CDATA[<p><strong>jb</strong> schrieb:</p>
<blockquote>
<p>1. Ist dieser Performance-Gedanke bei den heutigen Rechnern noch gerechtfertigt? (Um hierbei eine Kopie-Operation zu sparen?)</p>
</blockquote>
<p>Kommt drauf an was dein Programm macht. Wenn die Hauptaufgabe das Hin- und Herreichen von Strings die bereits zur Compilezeit festehen ist, dann ist <code>const char*</code> eventuell die bessere Wahl.</p>
<p><strong>jb</strong> schrieb:</p>
<blockquote>
<p>2. Gibt es eine Möglichkeit, dass die std::string-Klasse keine Kopie macht, sondern einfach auch auf den festen Speicherbereich zeigt?</p>
</blockquote>
<p>Nein. Man kann aber natürlich konstanten Referenzen auf bereits erstellte <code>std::string</code> an Funktionen weitergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479796</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Wed, 16 Dec 2015 20:30:18 GMT</pubDate></item><item><title><![CDATA[Reply to const char* vs. std::string - Speicher on Thu, 17 Dec 2015 10:28:49 GMT]]></title><description><![CDATA[<p>In Zukunft wird es im C++ Standard wahrscheinlich die Klasse string_view geben. Die ermöglicht es unter anderem, einem statischen C-String ein std::string-ähnliches Interface überzustülpen. Dann hat man quasi die Vorteile beider Welten. Implementierungen gibt es auch bereits.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479861</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Thu, 17 Dec 2015 10:28:49 GMT</pubDate></item><item><title><![CDATA[Reply to const char* vs. std::string - Speicher on Thu, 17 Dec 2015 14:23:19 GMT]]></title><description><![CDATA[<p>Ich verwende beim übergebem von strings immer noch const char* bzw const char16_t*.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479895</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Thu, 17 Dec 2015 14:23:19 GMT</pubDate></item><item><title><![CDATA[Reply to const char* vs. std::string - Speicher on Thu, 17 Dec 2015 20:36:48 GMT]]></title><description><![CDATA[<p>TNA schrieb:</p>
<blockquote>
<p>In Zukunft wird es im C++ Standard wahrscheinlich die Klasse string_view geben. Die ermöglicht es unter anderem, einem statischen C-String ein std::string-ähnliches Interface überzustülpen. Dann hat man quasi die Vorteile beider Welten. Implementierungen gibt es auch bereits.</p>
</blockquote>
<p>Mist. Daran arbeite ich gerade.<br />
Also, ich meine Nicht-Mist, kann mich wichtigeren Sachen zuwenden und string_view abwarten.<br />
Danke für die Info! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479933</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 17 Dec 2015 20:36:48 GMT</pubDate></item><item><title><![CDATA[Reply to const char* vs. std::string - Speicher on Thu, 17 Dec 2015 21:36:42 GMT]]></title><description><![CDATA[<blockquote>
<p>1. Ist dieser Performance-Gedanke bei den heutigen Rechnern noch gerechtfertigt? (Um hierbei eine Kopie-Operation zu sparen?)</p>
<p>2. Gibt es eine Möglichkeit, dass die std::string-Klasse keine Kopie macht, sondern einfach auch auf den festen Speicherbereich zeigt?</p>
</blockquote>
<p>Gibt durchaus Situationen, in denen der Zeiger auf den statischen Speicher zu bevorzugen ist.</p>
<p>Hatte mal die Situation, eine Unmenge von Substrings aus einem großen Text erstellen zu müssen. Da brachte es deutliche Vorteile, den Text nur einmal im Speicher abzulegen und stattdessen eine Stringklasse zu bauen, welche nur Beginn und Endadresse des Substrings kennt. Die Klasse kann man dann so ausbauen, wie man es braucht (z.B. std::string ähnlich).</p>
<p>P.S.: im Normalfall ist std::string aber absolut ausreichend!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479937</guid><dc:creator><![CDATA[substring]]></dc:creator><pubDate>Thu, 17 Dec 2015 21:36:42 GMT</pubDate></item></channel></rss>