<?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[Daten vom heap schnell an externes Programm übergeben]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich rufe in meinem Code ein weiteres Programm auf, dem ich mehrere 100MB an Daten übergebe. Z.z. übergebe ich die Daten als Datei, was zu langsam ist, vermutlich weil die Datei erst auf die Festplatte geschrieben wird. Das mache ich über std::ofstream::put(char).<br />
Wie kann ich diesen Vorgang beschleunigen? Kann ich die Datei einfach über den Arbeisspeicher übergeben? Zwar kann das aufgerufene Programm auch von stdin lesen, allerdings konnte ich nicht herausfinden wie ich in meinem Code die Daten in das Programm pipen kann um dann darauf zu warten bis es beendet wurde.</p>
<p>Danke,<br />
Cream</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269809/daten-vom-heap-schnell-an-externes-programm-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 22:16:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269809.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 01 Jul 2010 14:15:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Daten vom heap schnell an externes Programm übergeben on Thu, 01 Jul 2010 14:16:40 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich rufe in meinem Code ein weiteres Programm auf, dem ich mehrere 100MB an Daten übergebe. Z.z. übergebe ich die Daten als Datei, was zu langsam ist, vermutlich weil die Datei erst auf die Festplatte geschrieben wird. Das mache ich über std::ofstream::put(char).<br />
Wie kann ich diesen Vorgang beschleunigen? Kann ich die Datei einfach über den Arbeisspeicher übergeben? Zwar kann das aufgerufene Programm auch von stdin lesen, allerdings konnte ich nicht herausfinden wie ich in meinem Code die Daten in das Programm pipen kann um dann darauf zu warten bis es beendet wurde.</p>
<p>Danke,<br />
Cream</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919965</guid><dc:creator><![CDATA[Cream]]></dc:creator><pubDate>Thu, 01 Jul 2010 14:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to Daten vom heap schnell an externes Programm übergeben on Thu, 01 Jul 2010 14:59:12 GMT]]></title><description><![CDATA[<p>Mit Shared Memory. <a href="http://msdn.microsoft.com/en-us/library/aa366537(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/aa366537(VS.85).aspx</a> <a href="http://linux.die.net/man/2/shmget" rel="nofollow">http://linux.die.net/man/2/shmget</a> (Links eher geraten, denn wirklich geschaut, ob sie genau passen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919985</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 01 Jul 2010 14:59:12 GMT</pubDate></item><item><title><![CDATA[Reply to Daten vom heap schnell an externes Programm übergeben on Thu, 01 Jul 2010 14:59:50 GMT]]></title><description><![CDATA[<p>Du solltest put erst einmal durch write ersetzen und damit deine Daten in einem Rutsch schreiben. Damit wird das bereits deutlich schneller gehen. Normalerweise landen Schreibvorgänge erst einmal im Filecache und werden erst später auf die Platte geschrieben ohne dein Programm zu blockieren. Unter Windows kannst du CreateFile auch FILE_ATTRIBUTE_TEMPORARY mitgeben, was das OS veranlasst, die Daten nach Möglichkeit im RAM zu belassen.</p>
<p>Du kannst auch memory mapped files verwenden. Das ganze geht zwar auch über eine Datei, aber vermutlich hat das OS es nicht so eilig, das ganze auf die Platte zu bringen.<br />
Ist aber nur eine Vermutung, also am besten einfach ausprobieren und die Zeiten vergleichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919986</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Thu, 01 Jul 2010 14:59:50 GMT</pubDate></item><item><title><![CDATA[Reply to Daten vom heap schnell an externes Programm übergeben on Sat, 03 Jul 2010 09:22:24 GMT]]></title><description><![CDATA[<p>Athar schrieb:</p>
<blockquote>
<p>Du solltest put erst einmal durch write ersetzen und damit deine Daten in einem Rutsch schreiben. Damit wird das bereits deutlich schneller gehen. Normalerweise landen Schreibvorgänge erst einmal im Filecache und werden erst später auf die Platte geschrieben ohne dein Programm zu blockieren. Unter Windows kannst du CreateFile auch FILE_ATTRIBUTE_TEMPORARY mitgeben, was das OS veranlasst, die Daten nach Möglichkeit im RAM zu belassen.</p>
</blockquote>
<p>Danke für eure Hilfe! Die write Methode scheint für meine Belange auszureichen und ist im vergleich zu put erheblich schneller <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>THX!<br />
Cream</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920750</guid><dc:creator><![CDATA[Cream]]></dc:creator><pubDate>Sat, 03 Jul 2010 09:22:24 GMT</pubDate></item><item><title><![CDATA[Reply to Daten vom heap schnell an externes Programm übergeben on Sat, 03 Jul 2010 13:14:02 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Mit Shared Memory. <a href="http://msdn.microsoft.com/en-us/library/aa366537(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/aa366537(VS.85).aspx</a> <a href="http://linux.die.net/man/2/shmget" rel="nofollow">http://linux.die.net/man/2/shmget</a> (Links eher geraten, denn wirklich geschaut, ob sie genau passen)</p>
</blockquote>
<p>Woher willst du wissen, ob er Microsoft benutzt? <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="😃"
    /><br />
Wenn ja: Such dir nen passendes Forum!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Hier eine schöne Alternative, falls du es doch noch benötigen solltest:<br />
<a href="http://www.boost.org/doc/libs/1_43_0/doc/html/interprocess.html" rel="nofollow">http://www.boost.org/doc/libs/1_43_0/doc/html/interprocess.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920827</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 03 Jul 2010 13:14:02 GMT</pubDate></item><item><title><![CDATA[Reply to Daten vom heap schnell an externes Programm übergeben on Sat, 03 Jul 2010 21:50:37 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>Woher willst du wissen, ob er Microsoft benutzt? <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="😃"
    /><br />
Wenn ja: Such dir nen passendes Forum!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Hast Du wirklich beide Links angeschaut?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1920891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1920891</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 03 Jul 2010 21:50:37 GMT</pubDate></item></channel></rss>