<?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[Zeitaufwand für Deallokieren von Pointer-Matrizen]]></title><description><![CDATA[<p>Hallo alle zusammen,</p>
<p>ich bastle derzeit an einem Programm, um es schneller zu machen. Und wie ich es &quot;ausmesse&quot;, stelle ich fest, daß folgende Zeilen recht viel (um nicht gar zu sagen: VIELZUVIEL) Zeit fressen:</p>
<p>time=clock();<br />
for(i=0;i&lt;xSize;i++){ //xSize is dynamic, but 1024 for the measurement<br />
delete [] inDaten[i]; //jeweils 1024x1024 float-Matrizen<br />
delete [] inDaten2[i];<br />
delete [] copy[i];<br />
}<br />
delete [] inDaten; delete [] inDaten2; [] delete copy;<br />
time=clock()-time;<br />
time/=CLOCKS_PER_SEC;</p>
<p>Ich habe meine Zeitmessung ebenfalls mit eingefügt. Damit messe ich um die 2 Sekunden, was für die Laufzeit des Programms tödlich ist, da es ohne die (von mir später hinzugefügten) Funktionen, deren Ausschnitt oben steht, 15 Sekunden braucht.</p>
<p>Ist die Zeit, die zum Deallokieren von Matrizen gebraucht wird IMMER derartig lang? Wenn ja, muß ich meine ganze Programmierung überdenken, denn die Matrizen dienen als temporäre Arrays, die öfter allokiert und geslöscht werden sollen.</p>
<p>Vielen Dank für eure Antworten bereits im Voraus,</p>
<p>Baradrist</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269403/zeitaufwand-für-deallokieren-von-pointer-matrizen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 03:29:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269403.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 Jun 2010 12:05:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Thu, 24 Jun 2010 12:05:58 GMT]]></title><description><![CDATA[<p>Hallo alle zusammen,</p>
<p>ich bastle derzeit an einem Programm, um es schneller zu machen. Und wie ich es &quot;ausmesse&quot;, stelle ich fest, daß folgende Zeilen recht viel (um nicht gar zu sagen: VIELZUVIEL) Zeit fressen:</p>
<p>time=clock();<br />
for(i=0;i&lt;xSize;i++){ //xSize is dynamic, but 1024 for the measurement<br />
delete [] inDaten[i]; //jeweils 1024x1024 float-Matrizen<br />
delete [] inDaten2[i];<br />
delete [] copy[i];<br />
}<br />
delete [] inDaten; delete [] inDaten2; [] delete copy;<br />
time=clock()-time;<br />
time/=CLOCKS_PER_SEC;</p>
<p>Ich habe meine Zeitmessung ebenfalls mit eingefügt. Damit messe ich um die 2 Sekunden, was für die Laufzeit des Programms tödlich ist, da es ohne die (von mir später hinzugefügten) Funktionen, deren Ausschnitt oben steht, 15 Sekunden braucht.</p>
<p>Ist die Zeit, die zum Deallokieren von Matrizen gebraucht wird IMMER derartig lang? Wenn ja, muß ich meine ganze Programmierung überdenken, denn die Matrizen dienen als temporäre Arrays, die öfter allokiert und geslöscht werden sollen.</p>
<p>Vielen Dank für eure Antworten bereits im Voraus,</p>
<p>Baradrist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1916724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1916724</guid><dc:creator><![CDATA[Baradrist]]></dc:creator><pubDate>Thu, 24 Jun 2010 12:05:58 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Thu, 24 Jun 2010 12:09:06 GMT]]></title><description><![CDATA[<p>Baradrist schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Du solltest erstmal bei Matrizen auf eindimensionale Arrays umsteigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1916726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1916726</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 24 Jun 2010 12:09:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Thu, 24 Jun 2010 12:09:10 GMT]]></title><description><![CDATA[<p>Release Mode?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1916727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1916727</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 24 Jun 2010 12:09:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Thu, 24 Jun 2010 12:10:34 GMT]]></title><description><![CDATA[<p>Ich weiß nicht, ob new[]/delete[] derartig viel Zeit verbraten, aber falls ja: warum allozierst/deallozierst du denn ständig? Du kannst doch dein Temp-Array einmal allozieren (sofern du eine maximale Größe bestimmen kannst oder diese optimalerweise sogar fest ist) und dann einfach benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1916728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1916728</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 24 Jun 2010 12:10:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Thu, 24 Jun 2010 12:14:50 GMT]]></title><description><![CDATA[<p>Schalte OpenMP im Compiler an und messe es nochmal mit einer parallel for.<br />
Vorausgestzt du hast ein Mehrkernsystem und halbwegs aktuellen Compiler.</p>
<pre><code class="language-cpp">time=clock(); 
#pragma omp parallel for
for(i=0;i&lt;xSize;i++){            //xSize is dynamic, but 1024 for the measurement 
    delete [] inDaten[i];     //jeweils 1024x1024 float-Matrizen
    delete [] inDaten2[i]; 
    delete [] copy[i]; 
} 
delete [] inDaten; delete [] inDaten2; [] delete copy; 
time=clock()-time; 
time/=CLOCKS_PER_SEC;
</code></pre>
<p>Achja wie oben schon erwähnt es ist eher üblich eindimensionale Felder für Matrizen zu benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1916732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1916732</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 24 Jun 2010 12:14:50 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Thu, 24 Jun 2010 12:26:51 GMT]]></title><description><![CDATA[<p>Vielen Dank für die schnellen Antworten. Da die Matrizen wirklich dynamisch sein müßen (sie sitzen in mehrfach aufgerufenen Hilfsfunktionen denen Pointer-zu-Pointer-Matrizen verschiedener Größe übergeben werden), wird wohl die Variante mit eindimensionalen Matrizen zu Einsatz kommen - was kompliziert wird, da mehrere tausend Zeilen Code durchgegangen sein wollen. Aber es sollte reichen, nur die Temp-Matrizen eindimensional aufzubauen und damit reduziert sich der Aufwand bereits dramatisch =).</p>
<p>Vielen Dank für den Hinweis!</p>
<p>Bara</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1916742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1916742</guid><dc:creator><![CDATA[Baradrist]]></dc:creator><pubDate>Thu, 24 Jun 2010 12:26:51 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Thu, 24 Jun 2010 12:35:09 GMT]]></title><description><![CDATA[<p>Baradrist schrieb:</p>
<blockquote>
<p>Vielen Dank für die schnellen Antworten. Da die Matrizen wirklich dynamisch sein müßen (sie sitzen in mehrfach aufgerufenen Hilfsfunktionen denen Pointer-zu-Pointer-Matrizen verschiedener Größe übergeben werden), wird wohl die Variante mit eindimensionalen Matrizen zu Einsatz kommen - was kompliziert wird, da mehrere tausend Zeilen Code durchgegangen sein wollen. Aber es sollte reichen, nur die Temp-Matrizen eindimensional aufzubauen und damit reduziert sich der Aufwand bereits dramatisch =).</p>
<p>Vielen Dank für den Hinweis!</p>
<p>Bara</p>
</blockquote>
<p>Du musst ja nicht direkt alles umschreiben. Messe es mal mit einer OpenMP parallel for schleife durch. Das Ergebnis würde mich interessieren.</p>
<p>Außerdem solltest du das ganze über Zugriffsfunktionen wie z. B.</p>
<pre><code class="language-cpp">double A (int row, int col)  { return A[col*dim+row]; }
double Atrans (int row, int col) { return A[row*dim+co]);}
</code></pre>
<p>gestalten, dann hält sich die Anzahl der Änderungen in Grenzen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1916744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1916744</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 24 Jun 2010 12:35:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Thu, 24 Jun 2010 12:41:37 GMT]]></title><description><![CDATA[<p>Danke für den Hinweis - es wird mir wohl recht viel Arbeit sparen. Leider kann ich OpenMP parallel nicht nehmen, da mein Rechner hier auf Arbeit nur einen Core hat =).</p>
<p>Bara</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1916753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1916753</guid><dc:creator><![CDATA[Baradrist]]></dc:creator><pubDate>Thu, 24 Jun 2010 12:41:37 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Thu, 24 Jun 2010 12:48:36 GMT]]></title><description><![CDATA[<p>Baradrist schrieb:</p>
<blockquote>
<p>Danke für den Hinweis - es wird mir wohl recht viel Arbeit sparen. Leider kann ich OpenMP parallel nicht nehmen, da mein Rechner hier auf Arbeit nur einen Core hat =).</p>
<p>Bara</p>
</blockquote>
<p>Stehen lassen kannst du es trotzdem.<br />
Wenn der Compiler es nicht kennt wird er es übergehen,<br />
bei Single Core Systemen wird es auch keine Auswirkungen haben.<br />
Multicore Systeme müssten eigentlich skalieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1916754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1916754</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Thu, 24 Jun 2010 12:48:36 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Thu, 24 Jun 2010 13:41:27 GMT]]></title><description><![CDATA[<p>Richtig! Aber ausprobieren was rauskommt kann ich jetzt hier nicht - das meinte ich nur... . <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/1916801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1916801</guid><dc:creator><![CDATA[Baradrist]]></dc:creator><pubDate>Thu, 24 Jun 2010 13:41:27 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Thu, 24 Jun 2010 13:42:11 GMT]]></title><description><![CDATA[<p>Nochmals: Hast du im Release-Modus kompiliert? Sämtliche Optimierungen ein? Debug-Laufzeitumgebung aus (das ist <strong>nicht</strong> das gleiche wie Debug-Modus)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1916802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1916802</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 24 Jun 2010 13:42:11 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Fri, 25 Jun 2010 08:43:08 GMT]]></title><description><![CDATA[<p>Entschuldige, ich hatte deinen Post übersehen.</p>
<p>Ich habe tatsächlich den Debugger mitlaufen lassen. Ohne angehangenen Debugger (also mit Strg-F5) scheint mein Problem nicht mehr zu existieren... . Danke dir! Was macht der Debugger, daß es mit ihm so lange dauert? Liegt es daran, daß mit ihm nicht optimiert wird?</p>
<p>Bara</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917122</guid><dc:creator><![CDATA[Baradrist]]></dc:creator><pubDate>Fri, 25 Jun 2010 08:43:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Fri, 25 Jun 2010 08:57:34 GMT]]></title><description><![CDATA[<p>Durch den Release Modus aktivierst du in den meisten Entwicklungsumgebungen Optimierungen.</p>
<p>In Visual Studio ist es glaube ich /O2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917128</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Fri, 25 Jun 2010 08:57:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Fri, 25 Jun 2010 10:18:42 GMT]]></title><description><![CDATA[<p>Baradrist schrieb:</p>
<blockquote>
<p>Was macht der Debugger, daß es mit ihm so lange dauert? Liegt es daran, daß mit ihm nicht optimiert wird?</p>
</blockquote>
<p>Auch, aber nicht nur. Im Debugmodus willst du dir ja auch ggf. Speicherbereiche/Variableninhalte zur Laufzeit anzeigen lassen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917183</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 25 Jun 2010 10:18:42 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Fri, 25 Jun 2010 11:09:50 GMT]]></title><description><![CDATA[<p>Baradrist schrieb:</p>
<blockquote>
<p>Entschuldige, ich hatte deinen Post übersehen.</p>
<p>Ich habe tatsächlich den Debugger mitlaufen lassen. Ohne angehangenen Debugger (also mit Strg-F5) scheint mein Problem nicht mehr zu existieren... . Danke dir! Was macht der Debugger, daß es mit ihm so lange dauert? Liegt es daran, daß mit ihm nicht optimiert wird?</p>
<p>Bara</p>
</blockquote>
<p>Das weiß man nicht so genau. Zum einen wird wohl weniger optimiert, zum anderen können ganz andere Funktionen aufgerufen werden als im Release Modus. Gerade bei dynamischer Speicherverwaltung existieren häufig besondere Debug Funktionen, die nicht nur Speicher reservieren, sondern auch noch weitere Kontextinformationen des Aufrufs speichern, um das Auffinden von Speicherlecks zu vereinfachen. Das kostet natürlich jedesmal etwas Zeit, was bei Millionen von Aufrufen zu merkbaren Verzögerungen führen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917211</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 25 Jun 2010 11:09:50 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitaufwand für Deallokieren von Pointer-Matrizen on Sun, 27 Jun 2010 09:40:09 GMT]]></title><description><![CDATA[<blockquote>
<p>Das weiß man nicht so genau. Zum einen wird wohl weniger optimiert, zum anderen können ganz andere Funktionen aufgerufen werden als im Release Modus.</p>
</blockquote>
<p>Im Debug Modus wird eine andere Heap-Verwaltung genommen. Daher hast Du auch ein anderes Speicher-Layout.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917845</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 27 Jun 2010 09:40:09 GMT</pubDate></item></channel></rss>