<?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 zwischenspeichern]]></title><description><![CDATA[<p>Hi,</p>
<p>ich sitze gerade an einem Programm, das für mich eine Reihe von unterschiedlichen Rechnungen für Punkte in einem Volumen durchführt. Insgesamt möchte ich ca. 10.000*10.000*8 Punkte und damit Daten berechnen. Diese Daten sollen später in eine Datei geschrieben werden.</p>
<p>Ich habe das mit kleinen Punktemengen getestet und es hat sich als erheblich schneller erwiesen, die Daten in einem Array zwischen zu speichern und dann komplett in eine Datei zu schreiben. Allerdings habe ich jetzt das Problem, dass ein float-Array normal keine 10.000*10.000*8 Daten abspeichern kann.</p>
<p>Weiß jemand von euch wie ich das umgehen kann, oder hat vielleicht jemand eine bessere Idee, um diese Menge an Daten weiter zu verarbeiten? Ich suche nach einer Lösung, die möglichst wenig Zeit braucht, da die Rechnungen so schon sehr lange brauchen.</p>
<p>Danke.</p>
<p>Im Moment sieht mein Programm quasi so aus:</p>
<pre><code>float Ergebnis[10000][10000][8]; //Das gewünschte Array

for(int counter1=0; counter1&lt;10000; counter1++)
{
    for(int counter2=0; counter2&lt;10000; counter2++)
    {
        for(int counter3=0; counter3&lt;8; counter3++)
        {
            Ergebnis[counter1][counter2][counter3] = Rechnung(counter1, counter2, counter3); 
            //Da hier kein Problem vorliegt einfach nur eine kleine fiktive Rechnung, die für jeden einzelnen Punkt gemacht wird
        }
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/273173/daten-zwischenspeichern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 10:54:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/273173.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Sep 2010 15:12:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Daten zwischenspeichern on Wed, 01 Sep 2010 15:12:36 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich sitze gerade an einem Programm, das für mich eine Reihe von unterschiedlichen Rechnungen für Punkte in einem Volumen durchführt. Insgesamt möchte ich ca. 10.000*10.000*8 Punkte und damit Daten berechnen. Diese Daten sollen später in eine Datei geschrieben werden.</p>
<p>Ich habe das mit kleinen Punktemengen getestet und es hat sich als erheblich schneller erwiesen, die Daten in einem Array zwischen zu speichern und dann komplett in eine Datei zu schreiben. Allerdings habe ich jetzt das Problem, dass ein float-Array normal keine 10.000*10.000*8 Daten abspeichern kann.</p>
<p>Weiß jemand von euch wie ich das umgehen kann, oder hat vielleicht jemand eine bessere Idee, um diese Menge an Daten weiter zu verarbeiten? Ich suche nach einer Lösung, die möglichst wenig Zeit braucht, da die Rechnungen so schon sehr lange brauchen.</p>
<p>Danke.</p>
<p>Im Moment sieht mein Programm quasi so aus:</p>
<pre><code>float Ergebnis[10000][10000][8]; //Das gewünschte Array

for(int counter1=0; counter1&lt;10000; counter1++)
{
    for(int counter2=0; counter2&lt;10000; counter2++)
    {
        for(int counter3=0; counter3&lt;8; counter3++)
        {
            Ergebnis[counter1][counter2][counter3] = Rechnung(counter1, counter2, counter3); 
            //Da hier kein Problem vorliegt einfach nur eine kleine fiktive Rechnung, die für jeden einzelnen Punkt gemacht wird
        }
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1947005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947005</guid><dc:creator><![CDATA[Albertpb]]></dc:creator><pubDate>Wed, 01 Sep 2010 15:12:36 GMT</pubDate></item><item><title><![CDATA[Reply to Daten zwischenspeichern on Wed, 01 Sep 2010 15:26:57 GMT]]></title><description><![CDATA[<p>Immer einen Teil berechnen und dann speichern, ungefähr so:</p>
<pre><code class="language-cpp">float Ergebnis[10000][8]; //Das gewünschte Array

for(int counter1=0; counter1&lt;10000; counter1++)
{
    for(int counter2=0; counter2&lt;10000; counter2++)
    {
        for(int counter3=0; counter3&lt;8; counter3++)
        {
            Ergebnis[counter2][counter3] = Rechnung(counter1, counter2, counter3);
            //Da hier kein Problem vorliegt einfach nur eine kleine fiktive Rechnung, die für jeden einzelnen Punkt gemacht wird
        }
    }
	WriteToFile(Ergebnis);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1947010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947010</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Wed, 01 Sep 2010 15:26:57 GMT</pubDate></item><item><title><![CDATA[Reply to Daten zwischenspeichern on Wed, 01 Sep 2010 15:30:05 GMT]]></title><description><![CDATA[<p>Wenn du alles im Speicher halten willst sind das ca. 3 GB, das dürfte auf einem handelsüblichen 32-Bit-System schon knapp werden.<br />
Wenn du auf einem 64-Bit System mit ausreichend Speicher arbeitest, nimm einen <code>std::vector&lt;float&gt;</code> der Größe 10000*10000*8.<br />
Ansonsten halt kleinere Teile laden, verarbeiten, speichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1947011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947011</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Wed, 01 Sep 2010 15:30:05 GMT</pubDate></item><item><title><![CDATA[Reply to Daten zwischenspeichern on Wed, 01 Sep 2010 15:35:46 GMT]]></title><description><![CDATA[<p>Also ich arbeite auf einem 64bit System mit 4 bis 12 GB Speicher. Platz sollte nicht das Problem darstellen.</p>
<p>Wie komme ich denn an so einen Vektor ran?<br />
bzw. wie würde die Initialisierung, das zwischenspeichern und das auslesen aussehen?</p>
<blockquote>
<p>Wenn du alles im Speicher halten willst sind das ca. 3 GB, das dürfte auf einem handelsüblichen 32-Bit-System schon knapp werden.<br />
Wenn du auf einem 64-Bit System mit ausreichend Speicher arbeitest, nimm einen std::vector&lt;float&gt; der Größe 10000*10000*8.<br />
Ansonsten halt kleinere Teile laden, verarbeiten, speichern.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1947016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947016</guid><dc:creator><![CDATA[Albertpb]]></dc:creator><pubDate>Wed, 01 Sep 2010 15:35:46 GMT</pubDate></item><item><title><![CDATA[Reply to Daten zwischenspeichern on Wed, 01 Sep 2010 15:39:59 GMT]]></title><description><![CDATA[<p>Albertpb schrieb:</p>
<blockquote>
<p>Wie komme ich denn an so einen Vektor ran?<br />
bzw. wie würde die Initialisierung, das zwischenspeichern und das auslesen aussehen?</p>
</blockquote>
<p><code>#include &lt;vector&gt;</code><br />
<code>std::vector&lt;float&gt; Ergebnisse(10000 * 10000 * 8);</code><br />
<code>float &amp;wert = Ergebnisse[c1 * 10000 * 8 + c2 * 8 + c3]</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1947020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947020</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Wed, 01 Sep 2010 15:39:59 GMT</pubDate></item><item><title><![CDATA[Reply to Daten zwischenspeichern on Wed, 01 Sep 2010 15:43:04 GMT]]></title><description><![CDATA[<p>Albertpb schrieb:</p>
<blockquote>
<p>Wie komme ich denn an so einen Vektor ran?<br />
bzw. wie würde die Initialisierung, das zwischenspeichern und das auslesen aussehen?</p>
</blockquote>
<pre><code class="language-cpp">#include &lt;vector&gt;
using namespace std;

int main ()
{
   vector&lt;int&gt; Vektor; // Int Vektor
   Vektor.push_back(12); // Vektor[0] ist 12
}
</code></pre>
<p><a href="http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Vector" rel="nofollow">http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Vector</a><br />
(<a href="http://www.cplusplus.com/" rel="nofollow">www.cplusplus.com/</a> war bei mir offline <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1947022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947022</guid><dc:creator><![CDATA[xapols]]></dc:creator><pubDate>Wed, 01 Sep 2010 15:43:04 GMT</pubDate></item><item><title><![CDATA[Reply to Daten zwischenspeichern on Wed, 01 Sep 2010 15:52:59 GMT]]></title><description><![CDATA[<p>Super dann schon mal danke, ich denke das hilft mir weiter. Probiere es später mal aus.</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1947025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947025</guid><dc:creator><![CDATA[Albertpb]]></dc:creator><pubDate>Wed, 01 Sep 2010 15:52:59 GMT</pubDate></item><item><title><![CDATA[Reply to Daten zwischenspeichern on Wed, 01 Sep 2010 16:53:59 GMT]]></title><description><![CDATA[<p>Nukularfüsiker schrieb:</p>
<blockquote>
<p>Wenn du alles im Speicher halten willst sind das ca. 3 GB, das dürfte auf einem handelsüblichen 32-Bit-System schon knapp werden.<br />
Wenn du auf einem 64-Bit System mit ausreichend Speicher arbeitest, nimm einen <code>std::vector&lt;float&gt;</code> der Größe 10000*10000*8.<br />
Ansonsten halt kleinere Teile laden, verarbeiten, speichern.</p>
</blockquote>
<p>Ich würde jedoch trotzdem <code>std::deque</code> nehmen - vor allem, weil du nicht davon ausgehen kannst, 3GB Speicher am Stück zu bekommen - auf nem 32bit OS würde ich von _MAX_ 1-1.5GB ausgeben. Aber selbst auf nem 64bit OS würde ich mich nicht auf über 2-2.5GB verlassen.<br />
Und std::deque ist ja nun nicht so viel langsamer als vector...<br />
Du kannst auch erst mal vector über nen typedef nutzen, damit du es dann ändern kannst, wenn du merkst, dass du die 3GB idR nicht bekommst:</p>
<pre><code class="language-cpp">#if 1
# include &lt;vector&gt;
  typedef std::vector&lt;float&gt; container_t;
#else
# include &lt;deque&gt;
  typedef std::deque&lt;float&gt; container_t;
#endif

#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

int main()
{
	try
	{
		container_t container(/*10*/4*1000*10000*8);
		container.push_back( container.size() );
		std::cout &lt;&lt; container.size() &lt;&lt; std::endl;
	}
	catch(std::exception&amp; e)
	{
		std::cout &lt;&lt; e.what();
	}

	system(&quot;PAUSE&quot;);
}
</code></pre>
<p>btw: bad_alloc wurde bei mir nicht geworfen(allerdings waren beide Varianten ab 5*.... mit ner Ewigkeit des Wartens(und du brauchst ja 10*....) verbunden(und das ganze System hat nicht mehr reagiert - hab halt nur 4GB RAM - und wenn die voll sind, wirds düster^^ wenn du nicht mind. 8GB RAM hast, kannst du das eh vergessen).<br />
mit der vollen Größe hab ichs dann auch nicht mehr versucht - hab auch nur 4GB an auslagerungsdatei - danach wirds also noch mal langsamer, wenn zu der langsamen festplatte auch noch defragmentierung kommt, weil Windows wohl kaum &gt;4GB SPeicher am Stück (zumindest hier^^) finden wird <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>Da kannst du gleich mal gucken, ob du performance-technisch überhaupt Unterschiede spüren kannst - wenn ja, kannst du sie messen und dich dann noch immer entscheiden.</p>
<p>bb</p>
<p>PS: war ja schon ein wenig enttäuscht, dass der MSVC(10) das hier nicht mehr wegoptimieren kann... War fest davon ausgegangen, dass ich eh noch x Zeilen einbauen muss, nur damit er den vector/die deque nicht wegoptimiert<sup>.</sup></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1947055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947055</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 01 Sep 2010 16:53:59 GMT</pubDate></item></channel></rss>