<?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[string vs char*]]></title><description><![CDATA[<p>was ist perfomierter?<br />
String oder char*<br />
vector oder array was benutzt ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218537/string-vs-char</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 22:04:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218537.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 22 Jul 2008 07:39:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to string vs char* on Tue, 22 Jul 2008 07:39:26 GMT]]></title><description><![CDATA[<p>was ist perfomierter?<br />
String oder char*<br />
vector oder array was benutzt ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551393</guid><dc:creator><![CDATA[performance]]></dc:creator><pubDate>Tue, 22 Jul 2008 07:39:26 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Tue, 22 Jul 2008 07:57:31 GMT]]></title><description><![CDATA[<p>naja vector und string sind sichere varianten. Und performance technisch kaum langsamer bzw. gar nich langsamer.. kommst du von C ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551405</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 22 Jul 2008 07:57:31 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Tue, 22 Jul 2008 07:58:20 GMT]]></title><description><![CDATA[<p>wenns nicht char* sein muss einen String und wenn das Array dynamisch vergrößern und verkleinern soll einen Vector, ansonsten ein Array</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551406</guid><dc:creator><![CDATA[Jasc]]></dc:creator><pubDate>Tue, 22 Jul 2008 07:58:20 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Tue, 22 Jul 2008 07:58:49 GMT]]></title><description><![CDATA[<p>nein von c++<br />
aber ich habe gehört das C ein wenig schneller ist, da C++ programmierer die etwas langsamere standardbibliothek benutzen und diese langsamer ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551408</guid><dc:creator><![CDATA[performance]]></dc:creator><pubDate>Tue, 22 Jul 2008 07:58:49 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Tue, 22 Jul 2008 08:02:22 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if (!Duden.find(&quot;performiert&quot;))
    throw bad_lexical(&quot;Could not find performiert.&quot;);
</code></pre>
<p><a href="http://www.duden.de/suche/index.php?begriff=performiert&amp;bereich=mixed&amp;pneu=" rel="nofollow">Duden</a>.<br />
Strings und Vectoren sind so schnell wie dynamische Arrays (zumindest bei mir, natürlich nicht im Debug-Build aber das ist uninteressant). Es gibt also keinen Grund sie nicht zu verwenden. Im Gegensatz zu statischen Arrays können sie allerdings bei der Allokation langsamer sein (was sie bei mir z.B sind). Allerdings verliert man durch die Benutzung von rohen Arrays ziemlich viel Sicherheit und Komfort. Man sollte also dann seine STL Strukturen ersetzen, wenn einem der Profiler gesagt hat, dass genau diese und nichts anderes der Flaschenhals in einem performance-kritischen Bereich sind. Sonst sehe ich da eher weniger Anwendungsgebiete.<br />
Ach ja, statisch konstante Arrays missbrauche ich manchmal als Lookuptable, aber nur std::map sich als wirklich zu langsam erwiesen hat. Allerdings hoffe ich das das mit std::unordered_map aus C++0x dann auch zur Vergangenheit gehört.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551416</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Tue, 22 Jul 2008 08:02:22 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Tue, 22 Jul 2008 08:04:52 GMT]]></title><description><![CDATA[<p>Die performance ist in 99% aller Fälle die Überlegung nicht wert. Machs wie Jasc es gesagt hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551420</guid><dc:creator><![CDATA[Krux]]></dc:creator><pubDate>Tue, 22 Jul 2008 08:04:52 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Tue, 22 Jul 2008 08:31:58 GMT]]></title><description><![CDATA[<p>kannst ja mal testen;)</p>
<p>erstell mal ein statische Array und ein Vecotr</p>
<pre><code class="language-cpp">double dArray[100];

std::vector&lt;double&gt; dVector(100);

for(int i=0; i&lt; 100000; ++i){
for(int k=0; k&lt; 100; ++k)
  dArray[k]=k*2;
}

for(int i=0; i&lt; 100000; ++i){
int k=0;
for(std::vector&lt;double&gt;::iterator it = dVector.begin(); it =! dVector.end(); ++it,++k)
  (*it)=k*2;
}
</code></pre>
<p>mies mal die zeiten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551451</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 22 Jul 2008 08:31:58 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Tue, 22 Jul 2008 09:50:13 GMT]]></title><description><![CDATA[<p>für statische arrays gibt es boost::array&lt;&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551490</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 22 Jul 2008 09:50:13 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Tue, 22 Jul 2008 09:50:20 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>mies mal die zeiten...</p>
</blockquote>
<p>Was willst du damit sagen? Beide Codes erzeugen in etwa dasselbe Assembly (im Release Build). Unterschiedliche Zeiten haben also wenn überhaupt andere Ursachen.</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

void traverse_vector(std::vector&lt;double&gt;&amp; vector);

void traverse_array(double (&amp;array)[100]);

int main()
{
	std::vector&lt;double&gt; vector(100); 
	double array[100];

	traverse_vector(vector);
	traverse_array(array);
}

void traverse_vector(std::vector&lt;double&gt;&amp; vector)
{
	int k = 0;
	for (std::vector&lt;double&gt;::iterator iter = vector.begin();
		 iter != vector.end(); ++iter, ++k)
		(*iter) = k * 2; 
}

void traverse_array(double (&amp;array)[100])
{
	for(int k = 0; k != 100; ++k) 
		array[k] = k * 2; 
}
</code></pre>
<p>Assembly für traverse_vector (inline):</p>
<pre><code class="language-asm">; 13   : 	traverse_vector(vector);

$LL18@main:
	fild	DWORD PTR tv292[esp+832]
	add	DWORD PTR tv292[esp+832], esi
	add	eax, 8
	fstp	QWORD PTR [eax-8]
	cmp	eax, ecx
	jne	SHORT $LL18@main
$LN16@main:
</code></pre>
<p>Assembly für traverse array(ebenfalls inline):</p>
<pre><code class="language-asm">; 14   : 	traverse_array(array);

	xor	eax, eax
	mov	DWORD PTR tv304[esp+832], eax
	lea	ecx, DWORD PTR _array$[esp+832]
	npad	4
$LL47@main:
	fild	DWORD PTR tv304[esp+832]
	add	eax, esi
	add	ecx, 8
	mov	DWORD PTR tv304[esp+832], eax
	fstp	QWORD PTR [ecx-8]
	cmp	eax, 200				; 000000c8H
	jne	SHORT $LL47@main
</code></pre>
<p>Man beachte, dass traverse_array zuerst den &quot;Müll&quot; von traverse_vector aufrümen muss, aber das wäre umgekehrt genauso.</p>
<p>Ach ja, Compiler MSVC 2008. Höchste Optimierungsstufe.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551491</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Tue, 22 Jul 2008 09:50:20 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Tue, 22 Jul 2008 10:18:55 GMT]]></title><description><![CDATA[<p>ich will damit sagen, das es performance technisch gesehen.. keine &quot;relevanten&quot; unterschiede gibt;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551504</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 22 Jul 2008 10:18:55 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Tue, 22 Jul 2008 18:22:37 GMT]]></title><description><![CDATA[<p><a href="http://www.duden.de/duden-suche/werke/fx/000/106/mies.106806.html" rel="nofollow">http://www.duden.de/duden-suche/werke/fx/000/106/mies.106806.html</a><br />
Hat nichts mit messen zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551891</guid><dc:creator><![CDATA[malBoris]]></dc:creator><pubDate>Tue, 22 Jul 2008 18:22:37 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Wed, 23 Jul 2008 03:09:33 GMT]]></title><description><![CDATA[<p>Er Russe und nix Deutsch egro nicht 100% Deutsch Rechtschreibung.</p>
<p>Hier im Forum wird schikaniert wo's nur geht hab ich schon erkannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552075</guid><dc:creator><![CDATA[HumanCompiler]]></dc:creator><pubDate>Wed, 23 Jul 2008 03:09:33 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Thu, 24 Jul 2008 22:52:00 GMT]]></title><description><![CDATA[<p>performance schrieb:</p>
<blockquote>
<p>was ist perfomierter?<br />
String oder char*<br />
vector oder array was benutzt ihr?</p>
</blockquote>
<p>Hmmm, also ich kenne &quot;Perdormance&quot; nur Laufzeitmessungen - und diese nur von Vorgängen und niemals von Objekten. Der Begriff &quot;Performance&quot; ist also nur verwendbar, wenn man etwas <em>tut</em> und ich würde sagen, solange nicht irgendwie definiert wird, was mit char*, string, vector, .... <em>getan</em> werden soll (und wie), ist schon die Fragestellung nicht sinnvoll.</p>
<p>Analog: &quot;Ist Fahren violetter als Schwimmen ?&quot; <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>Das klingt vllt. etwas abgehoben, soll aber auf ein Kernproblem hinweisen: Wer einen Vergleich trotzdem versucht, wird sich Ewigkeiten in &quot;Äpfel&amp;Birnen&quot;-Problemen verheddern...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553276</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 24 Jul 2008 22:52:00 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Thu, 24 Jul 2008 23:41:39 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>ich will damit sagen, das es performance technisch gesehen.. keine &quot;relevanten&quot; unterschiede gibt;)</p>
</blockquote>
<p>Es gibt je nachdem was man damit aufführt ganz dramatische Unterschiede.<br />
Was nicht heissen soll dass man verfrüht optimieren sollte.</p>
<p>Oder würdest du es für sinnvoll und gut erachten eine Vektorklasse für nen 3D Spiel z.B. so zu implementieren:</p>
<pre><code class="language-cpp">template &lt;class T, unsigned N&gt; class Vector
{
public:
    Vector() : m_vec(N) {}
    // ...
private:
    std::vector&lt;T&gt; m_vec;
};
</code></pre>
<p>Und sag jetzt nicht das sei Realitätsfremd, denn das ist 1:1 einem realen Beispiel nachempfunden. Code der als production-ready abgegeben wurde. Bloss dass dort gleich die std::vector&lt;float&gt; rumgereicht wurden, ohne Wrapper-Klasse. By Value. An 100 Stellen. Und zugewiesen und verglichen und ... ich glaube man kann sich ein Bild machen.</p>
<p>EDIT:</p>
<blockquote>
<p>solange nicht irgendwie definiert wird, was mit char*, string, vector, .... getan werden soll (und wie), ist schon die Fragestellung nicht sinnvoll (...)</p>
</blockquote>
<p>ACK</p>
<blockquote>
<p>Ist Fahren violetter als Schwimmen ?</p>
</blockquote>
<p>Weiss nicht, aber nachts isses ganz sicher kälter als draussen <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/1553283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553283</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 24 Jul 2008 23:41:39 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Thu, 24 Jul 2008 23:55:07 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>ich will damit sagen, das es performance technisch gesehen.. keine &quot;relevanten&quot; unterschiede gibt;)</p>
</blockquote>
<p>Es gibt je nachdem was man damit aufführt ganz dramatische Unterschiede.<br />
Was nicht heissen soll dass man verfrüht optimieren sollte.</p>
<p>Oder würdest du es für sinnvoll und gut erachten eine Vektorklasse für nen 3D Spiel z.B. so zu implementieren:</p>
<pre><code class="language-cpp">template &lt;class T, unsigned N&gt; class Vector
{
public:
    Vector() : m_vec(N) {}
    // ...
private:
    std::vector&lt;T&gt; m_vec;
};
</code></pre>
<p>Und sag jetzt nicht das sei Realitätsfremd, denn das ist 1:1 einem realen Beispiel nachempfunden. Code der als production-ready abgegeben wurde. Bloss dass dort gleich die std::vector&lt;float&gt; rumgereicht wurden, ohne Wrapper-Klasse. By Value. An 100 Stellen. Und zugewiesen und verglichen und ... ich glaube man kann sich ein Bild machen.</p>
</blockquote>
<p>Falsche Parameterübergabe hat aber nichts mit dem eigetnlichen Performanceunterschied zwischen vector und array zu tun <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>
<p>aber is doch eh nur n troll thread...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553287</guid><dc:creator><![CDATA[666......]]></dc:creator><pubDate>Thu, 24 Jul 2008 23:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Fri, 25 Jul 2008 00:02:00 GMT]]></title><description><![CDATA[<p>666...... schrieb:</p>
<blockquote>
<p>Falsche Parameterübergabe hat aber nichts mit dem eigetnlichen Performanceunterschied zwischen vector und array zu tun</p>
</blockquote>
<p>Oh Mann du Doofnuss.<br />
Dass die Teile by value rumgereicht wurden ist doch nur das Tüpfelchen auf dem i.<br />
Als Returnwert z.B. MUSS hier kopiert werden, und einen std::vector&lt;float&gt; mit Grösse 3 zu kopieren kostet halt einfach zig mal mehr als schnell mal eben 3 floats rumzuschieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553289</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 25 Jul 2008 00:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Fri, 25 Jul 2008 03:01:55 GMT]]></title><description><![CDATA[<p>ACK, aber:</p>
<pre><code class="language-cpp">class Foo{
...
pulbic:
Foo(){..}
Foo(const Foo &amp;scr){
.
.
.
}
.
.
};

Foo *pA= new Foo[10];
std::vector&lt;Foo&gt; pV(10);
.
.
.
.
</code></pre>
<p>geht es hier nich gleich lan das array oder den vector zu kopieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553304</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Fri, 25 Jul 2008 03:01:55 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Fri, 25 Jul 2008 17:16:40 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>666...... schrieb:</p>
<blockquote>
<p>Falsche Parameterübergabe hat aber nichts mit dem eigetnlichen Performanceunterschied zwischen vector und array zu tun</p>
</blockquote>
<p>Oh Mann du Doofnuss.<br />
Dass die Teile by value rumgereicht wurden ist doch nur das Tüpfelchen auf dem i.<br />
Als Returnwert z.B. MUSS hier kopiert werden, und einen std::vector&lt;float&gt; mit Grösse 3 zu kopieren kostet halt einfach zig mal mehr als schnell mal eben 3 floats rumzuschieben.</p>
</blockquote>
<p>ach ja, dass hier die Leute immer dann meinen den anderen als dumm darstellen zu müssen, wenn sie es selber sind...</p>
<p>schau dir mal <a href="https://www.google.de/search?&amp;q=named%20return%20value%20optimization" rel="nofollow">Google: named return value optimization</a> an</p>
<p>Und wenn du da wirklich ein Performace Problem hast, weils dein Compiler nicht optimieren kann, dann kannst du das gleiche selber machen. Und somit sind wir wieder bei</p>
<blockquote>
<p>Falsche Parameterübergabe hat aber nichts mit dem eigetnlichen Performanceunterschied zwischen vector und array zu tun</p>
</blockquote>
<p><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>
<p>P.S: Auf das nächste dumme geflame werd ich nicht mehr antworten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553731</guid><dc:creator><![CDATA[666......]]></dc:creator><pubDate>Fri, 25 Jul 2008 17:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to string vs char* on Fri, 25 Jul 2008 18:21:55 GMT]]></title><description><![CDATA[<p><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="🙄"
    /><br />
Wie immer: Die Anonymität des Internets verleitet anscheinend immer dazu, unfreundlicher, ruppiger, pampiger, ... zu schreiben - und gleichzeitig viel empfindlicher zu lesen. Schon interessant, dass Gelassenheit durch die Distanz und Unverbindlichkeit nicht zu- sondern abnimmt.....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1553758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1553758</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 25 Jul 2008 18:21:55 GMT</pubDate></item></channel></rss>