<?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[Geschwindigkeit von Strings]]></title><description><![CDATA[<p>Gibt es sinnvolle Benchmarks für Stringklassen im Bezug auf Zuweisung, Iteration o.ä.? Womit würdet ihr die Performance einer Stringklasse messen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/148710/geschwindigkeit-von-strings</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 00:57:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/148710.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 May 2006 17:46:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Geschwindigkeit von Strings on Mon, 29 May 2006 17:46:45 GMT]]></title><description><![CDATA[<p>Gibt es sinnvolle Benchmarks für Stringklassen im Bezug auf Zuweisung, Iteration o.ä.? Womit würdet ihr die Performance einer Stringklasse messen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067582</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 29 May 2006 17:46:45 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwindigkeit von Strings on Mon, 29 May 2006 18:17:15 GMT]]></title><description><![CDATA[<p>ich würde mit</p>
<pre><code class="language-cpp">long anfang = GetTickCount();
// Was mit dem string tun
long ende = GetTickCount();
cout &lt;&lt; ende - anfang &lt;&lt; endl;
</code></pre>
<p>die zeit stopen und vergleichen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067598</guid><dc:creator><![CDATA[KingOfTheBlueMouse]]></dc:creator><pubDate>Mon, 29 May 2006 18:17:15 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwindigkeit von Strings on Mon, 29 May 2006 19:46:46 GMT]]></title><description><![CDATA[<p>KingOfTheBlueMouse schrieb:</p>
<blockquote>
<p>ich würde mit</p>
<pre><code class="language-cpp">long anfang = GetTickCount();
// Was mit dem string tun
long ende = GetTickCount();
cout &lt;&lt; ende - anfang &lt;&lt; endl;
</code></pre>
<p>die zeit stopen und vergleichen</p>
</blockquote>
<p>Naja, GetTickCount() arbeitet auf einigen Plattformen sogar mit 16ms Schritten, deswegen wäre wohl z.B. ein QueryPerformanceCounter angebrachter.</p>
<p>Ich kannte mal eine Seite wo Benchmarks von strings mit zuweisungen, etc. im Vergleich zu char* durchgeführt wurden auf ziemlich alten PC, so 286 und co. Das Fazit war, das die string-Klasse meistens besser war. Leider find ich die Seite nicht mehr <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="😞"
    /></p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1067658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1067658</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Mon, 29 May 2006 19:46:46 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwindigkeit von Strings on Tue, 30 May 2006 12:01:43 GMT]]></title><description><![CDATA[<blockquote>
<p>Naja, GetTickCount() arbeitet auf einigen Plattformen sogar mit 16ms Schritten, deswegen wäre wohl z.B. ein QueryPerformanceCounter angebrachter.</p>
</blockquote>
<p>und wieder was gelernt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068017</guid><dc:creator><![CDATA[KingOfTheBlueMouse]]></dc:creator><pubDate>Tue, 30 May 2006 12:01:43 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwindigkeit von Strings on Tue, 30 May 2006 15:42:41 GMT]]></title><description><![CDATA[<p>KingOfTheBlueMouse schrieb:</p>
<blockquote>
<p>ich würde mit</p>
<pre><code class="language-cpp">long anfang = GetTickCount();
// Was mit dem string tun
long ende = GetTickCount();
cout &lt;&lt; ende - anfang &lt;&lt; endl;
</code></pre>
<p>die zeit stopen und vergleichen</p>
</blockquote>
<p>Danke, aber das mit der Zeit mach ich einfach mit Boost.Timer, so schnell wird das ganze schon nicht ablaufen. Es geht eher um das, was joomoo angesprochen hat. Kennt irgendjemand anderes solche Seiten? Gibts vielleicht etwas &quot;praxisnahes&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068193</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 30 May 2006 15:42:41 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwindigkeit von Strings on Tue, 30 May 2006 15:46:29 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>die zeit stopen und vergleichen</p>
</blockquote>
<p>Danke, aber das mit der Zeit mach ich einfach mit Boost.Timer, so schnell wird das ganze schon nicht ablaufen. Es geht eher um das, was joomoo angesprochen hat. Kennt irgendjemand anderes solche Seiten? Gibts vielleicht etwas &quot;praxisnahes&quot;?[/quote]</p>
<p>Mich würde interessieren warum du das wissen möchtest? Generell oder erscheinen dir &quot;C-Strings&quot; performanter?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068198</guid><dc:creator><![CDATA[HaJo.]]></dc:creator><pubDate>Tue, 30 May 2006 15:46:29 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwindigkeit von Strings on Tue, 30 May 2006 15:50:29 GMT]]></title><description><![CDATA[<p>Ne, ich hab ne eigene Stringklasse geschrieben. Es geht vor allem darum, wie die Strings gespeichert werden. An diesem Punkt kann ich das noch auf Policies aufteilen, aber erstmal möchte ich testen, ob einfache STL-Container (vor allem vector und deque) es auch tun, bzw. vor allem wie schnell sie sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068201</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 30 May 2006 15:50:29 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwindigkeit von Strings on Tue, 30 May 2006 15:53:37 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Ne, ich hab ne eigene Stringklasse geschrieben. Es geht vor allem darum, wie die Strings gespeichert werden. An diesem Punkt kann ich das noch auf Policies aufteilen, aber erstmal möchte ich testen, ob einfache STL-Container (vor allem vector und deque) es auch tun, bzw. vor allem wie schnell sie sind.</p>
</blockquote>
<p>Was heißt wie die Strings gespeichert werden?<br />
Meinst du den internen Zeiger auf den C-String der Klasse oder meinst du ein Array von Stringklassen?</p>
<p>Was sind Policies?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068204</guid><dc:creator><![CDATA[HaJo.]]></dc:creator><pubDate>Tue, 30 May 2006 15:53:37 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwindigkeit von Strings on Tue, 30 May 2006 16:04:01 GMT]]></title><description><![CDATA[<p>Policies werden in &quot;Modernes C++ Design&quot; von Alexandrescu (und noch an verschiedenen anderen Stellen) beschrieben, s. <a href="http://en.wikipedia.org/wiki/Policy-based_design" rel="nofollow">Link</a>. Sie sind sehr praktisch, wenn eine Klasse auf gleiche Weise mit verschiedenen Verfahren implementiert werden kann, hier die Speicherung der Strings. Ziel ist es, nicht mehr seperate Klassen für string und rope (also eine Klasse für sehr lange Strings zu haben, gehört zu den SGI STL-Erweiterungen ist aber auch bei der GNU c++stdlib dabei) zu haben, sondern das über eine Policy zu bestimmen.<br />
Ein weiteres Ziel ist es, verschiedene Encodings zur Compile-Zeit zu unterstützen um UTF-8 in annehmbarer Geschwindigkeit mit einem Standard-ähnlichen String benutzen zu können, ohne das wirklich zu merken (deshalb ist das Encoding bei mir auch quasi eine Policy).</p>
<p>Mit Daten meine ich wirklich die richtige Speicherung. Sie muss eigentlich nur Iteratoren unterstützen (echte Pointer sind also nicht direkt drin, nur über ein Struct).</p>
<pre><code class="language-cpp">template&lt;typename Encoding, template&lt;typename&gt; class Storage&gt;
class string
{
public:
    typedef Storage&lt;typename Encoding::base_type&gt; storage_type;
    // ...
private:
    storage_type _data;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1068212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068212</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 30 May 2006 16:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwindigkeit von Strings on Tue, 30 May 2006 16:08:41 GMT]]></title><description><![CDATA[<p>die frage, 'wie' schnell etwas ist, ist häufig schwer zu beantworten, das hängt einfach von zu vielen nebenbedingungen ab. interessant ist meistens aber nur, wie sich eine operation im vergleich zu anderen verhält - in diesem falle hat man bessere kontrolle darüber, dass in beiden fälle die selben bedingungen für die messung herrschen. jede der genannten bedingungen könnte also akzeptabel sein. eine weitere möglichkeit ist die benutzung des time stamp counters (und damit die höchstmögliche sinnvolle auflösung in takten), sofern man sich der einschränkungen bewusst ist. soferen es sich um ein ein-prozessor single-core (HT schadet nicht) system handelt, kann man das einsetzen. die hohe auflösung hat den vorteil, dass die gemessenen zeiten relativ kurz sein dürfen (im bereich weniger hundert takte), somit schränkt man den einfluss externen bremsen ein, zusätzlich kann man das gut mittels volkards minimum algorithmus optimieren.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
typedef unsigned long long u64;
#ifdef __GNUC__
inline u64 rdtsc()
{
    u64 result;
    asm( &quot;rdtsc&quot; : &quot;=A&quot; (result) );
    return result;
}
#elif define _MSC_VER
inline u64 rdtsc()
{
    asm rdtsc;
}
#endif
int main()
{
    u64 minimum = ~0ull;
    for ( int i = 10000; i; --i )
    {
        u64 t = rdtsc();
        // mach was...
        t = rdtsc() - t;
        if ( t &lt; minimum )
        {
            minimum = t;
            i = 10000;
        }
    }
    std::cout &lt;&lt; minimum;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1068216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068216</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 30 May 2006 16:08:41 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwindigkeit von Strings on Tue, 30 May 2006 16:11:35 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9606">@filmor</a>: du bist nicht der erste (und sicher auch nicht der letzte), der sich daran versucht. wegen der speichermethode schau dir auch mal Alexandrescus flex_string an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1068218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068218</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 30 May 2006 16:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to Geschwindigkeit von Strings on Tue, 30 May 2006 16:16:38 GMT]]></title><description><![CDATA[<p>Ist das in Loki?<br />
/edit: Ist gut, habs mit Google gefunden ... <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/1068220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1068220</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 30 May 2006 16:16:38 GMT</pubDate></item></channel></rss>