<?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[Performance C++ vs C in Sachen Files]]></title><description><![CDATA[<p>Hoihoi <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 sehr oft über die Performance von C++ Streams gejammert wird und ich relativ zeitkritisch riesige Mengen Text lesen &amp; parsen muss (es handelt sich um virtuelle Dateien, dh. die IO-Kapazitäten irgendeines Gerätes schränken nicht ein), wollte ich mal testen ob fscanf() gegenüber std::ifstream Geschwindigkeitsvorteile bietet.</p>
<p>Das Resultat war dass 1.000.000 mal die /proc/[pid]/stat File unter Linux zu lesen &amp; parsen 27.497s mit der C++ Lösung gedauert hat ... mit fscanf() waren es 28.651s.</p>
<p>Wie kann das sein wenn die Streams doch so einen schlechten Ruf in Sachen Performance haben sollen? Kann ich definitiv nicht unterschreiben.</p>
<p>Grüße,<br />
Ethon</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284625/performance-c-vs-c-in-sachen-files</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 23:16:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284625.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Apr 2011 09:32:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Performance C++ vs C in Sachen Files on Tue, 05 Apr 2011 09:32:14 GMT]]></title><description><![CDATA[<p>Hoihoi <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 sehr oft über die Performance von C++ Streams gejammert wird und ich relativ zeitkritisch riesige Mengen Text lesen &amp; parsen muss (es handelt sich um virtuelle Dateien, dh. die IO-Kapazitäten irgendeines Gerätes schränken nicht ein), wollte ich mal testen ob fscanf() gegenüber std::ifstream Geschwindigkeitsvorteile bietet.</p>
<p>Das Resultat war dass 1.000.000 mal die /proc/[pid]/stat File unter Linux zu lesen &amp; parsen 27.497s mit der C++ Lösung gedauert hat ... mit fscanf() waren es 28.651s.</p>
<p>Wie kann das sein wenn die Streams doch so einen schlechten Ruf in Sachen Performance haben sollen? Kann ich definitiv nicht unterschreiben.</p>
<p>Grüße,<br />
Ethon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044826</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 05 Apr 2011 09:32:14 GMT</pubDate></item><item><title><![CDATA[Reply to Performance C++ vs C in Sachen Files on Tue, 05 Apr 2011 09:47:15 GMT]]></title><description><![CDATA[<p>Ruf ist eben nicht alles. Wenn du auf jedes Gerücht im Internet hörst, müsstest du deinen Computer mittels Steckplatine programmieren für optimale Performance. Die C++ und die C Funktionen unterscheiden sich vor allem durch die Stärke ihrer Parsingmöglichkeiten. Die Streams kennen da in der Regel von Haus aus viel mehr mögliche Formate. Nun können grob gesagt 3 Fälle eintreten:<br />
1. Dein Programm ist Parserlastig und du benötigst anspruchsvolles Parsing: Bei den C Funktionen musst du nun eventuell fehlende Funktionalität hinzufügen während du die Streams direkt benutzen kannst. Beide Programme sollten gleich schnell sein, das C++ Programm ist einfacher zu entwickeln.<br />
2. Dein Programm ist Parserlastig und du benötigst kein anspruchsvolles Parsing: Die Streams verschwenden nun eventuell Zeit für Funktionen die gar nicht gebraucht werden, die C Funktionen sind daher schneller. Beide Programme sind ungefähr gleich schwer zu entwickeln.<br />
3. Dein Programm ist IO-lastig: Es ist egal ob man C++ oder C benutzt, eine Festplatte wird dadurch nicht schneller. Beide Programme sind gleich schnell.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044833</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 05 Apr 2011 09:47:15 GMT</pubDate></item><item><title><![CDATA[Reply to Performance C++ vs C in Sachen Files on Tue, 05 Apr 2011 09:58:25 GMT]]></title><description><![CDATA[<p>Naja, die Dateien sind praktisch einfach nur einzulesen ... die stat-file sieht ja in etwa so aus:</p>
<blockquote>
<p>flo@ice:~/Projekte/ethonmem/tests/benchgetstatus$ cat /proc/self/stat<br />
3387 (cat) R 2445 3387 2445 34816 3387 4202496 247 0 0 0 0 0 0 0 20 0 1 0 659176 5636096 175 18446744073709551615 4194304 4247204 140735998812400 140737160937672 140520653464736 0 0 0 0 0 0 0 17 1 0 0 0 0 0</p>
</blockquote>
<p>Deswegen verwundert es mich schon irgendwie dass bei praktisch jedem Test die C++-Version die C Version abhängt.</p>
<p>(Code muss ich wohl nicht zeigen, die C++-Version liest einfach per operator&gt;&gt;, die C mit fscanf und einem riesigen Formatstring.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044839</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 05 Apr 2011 09:58:25 GMT</pubDate></item><item><title><![CDATA[Reply to Performance C++ vs C in Sachen Files on Tue, 05 Apr 2011 10:04:15 GMT]]></title><description><![CDATA[<p>Der C-Formatstring muss ja auch erstmal geparst werden (zur Laufzeit) und dann die richtige Interpretation der Daten ausgewählt werden. Im op&gt;&gt; steht schon hartcodiert drin, wie die Daten interpretiert werden sollen, weil die richtige Überladung des op&gt;&gt; gewählt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044843</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 05 Apr 2011 10:04:15 GMT</pubDate></item><item><title><![CDATA[Reply to Performance C++ vs C in Sachen Files on Tue, 05 Apr 2011 10:06:34 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>(Code muss ich wohl nicht zeigen, die C++-Version liest einfach per operator&gt;&gt;, die C mit fscanf und einem riesigen Formatstring.)</p>
</blockquote>
<p>Ich vermute mal das fällt unter Parserlastig. Du kannst zum Test ja mal die Eingabe aus dem Arbeitsspeicher kommen lassen anstatt aus einer echten Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044845</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 05 Apr 2011 10:06:34 GMT</pubDate></item><item><title><![CDATA[Reply to Performance C++ vs C in Sachen Files on Tue, 05 Apr 2011 10:48:56 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ethon schrieb:</p>
<blockquote>
<p>(Code muss ich wohl nicht zeigen, die C++-Version liest einfach per operator&gt;&gt;, die C mit fscanf und einem riesigen Formatstring.)</p>
</blockquote>
<p>Ich vermute mal das fällt unter Parserlastig. Du kannst zum Test ja mal die Eingabe aus dem Arbeitsspeicher kommen lassen anstatt aus einer echten Datei.</p>
</blockquote>
<p>/proc ist ein virtuelles Dateisystem unter Linux um Usermode-Zugriff auf Kerneldaten zu ermöglichen, jede Datei wird standardmäßig im RAM gehalten.</p>
<p>Aber danke. <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/2044875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044875</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 05 Apr 2011 10:48:56 GMT</pubDate></item><item><title><![CDATA[Reply to Performance C++ vs C in Sachen Files on Tue, 05 Apr 2011 11:16:34 GMT]]></title><description><![CDATA[<p>Das Ganze hängt auch noch von der verwendeten stream-Implementation ab. Ich habe vor längerer Zeit auch mal solche Geschwindigkeitsvergleiche gemacht. Da war STLPort etwa gleich schnell wie die C-Varianten, aber Dinkumware sehr viel langsamer (rund Faktor 3). Allerdings bei realen Dateien.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044898</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 05 Apr 2011 11:16:34 GMT</pubDate></item><item><title><![CDATA[Reply to Performance C++ vs C in Sachen Files on Tue, 05 Apr 2011 11:46:33 GMT]]></title><description><![CDATA[<p>Dass die Streams einen schlechten Ruf in Bezug auf Performance haben, ist historisch bedingt - es gab eine Zeit, da waren die meisten iostream-Implementationen in der Tat deutlich langsamer als die entsprechenden C-Funktionen, und das hing in erster Linie mit ineffizienter Implementation der Locales-Subbibliothek zusammen. Bjarne Stroustrup verlinkt auf seiner Seite ein <a href="http://www.research.att.com/~bs/performanceTR.pdf" rel="nofollow">Papier</a> aus dem Jahr 2003, in dem die Problematik und mögliche Lösungen beschrieben sind; der für iostreams relevante Teil ist 3.1 (ab Seite 61).</p>
<p>Das ist jetzt knapp acht Jahre her, und diese Lösungen sind umgesetzt, daher gilt das Urteil nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044916</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 05 Apr 2011 11:46:33 GMT</pubDate></item></channel></rss>