<?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[ByteArray mit new oder ohne]]></title><description><![CDATA[<p>Hallo</p>
<p>worin besteht eigentlich der Unterschied zwischen</p>
<pre><code class="language-cpp">BYTE data[400];
</code></pre>
<p>und</p>
<pre><code class="language-cpp">BYTE *data = new BYTE [400];
</code></pre>
<p>welches dann mit delete[] wieder vom Heap gelöscht werden muss bzw. kann...</p>
<p>Wird das erste BYTE-Array auf dem Stack abgelegt? Und wird dies auch irgendwann wieder gelöscht bzw. bei jedem Aufruf der Funktion wieder erzeugt? Und welche Version macht mehr Sinn?</p>
<p>Gruß<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268014/bytearray-mit-new-oder-ohne</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 04:03:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268014.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Jun 2010 18:52:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ByteArray mit new oder ohne on Wed, 02 Jun 2010 18:52:40 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>worin besteht eigentlich der Unterschied zwischen</p>
<pre><code class="language-cpp">BYTE data[400];
</code></pre>
<p>und</p>
<pre><code class="language-cpp">BYTE *data = new BYTE [400];
</code></pre>
<p>welches dann mit delete[] wieder vom Heap gelöscht werden muss bzw. kann...</p>
<p>Wird das erste BYTE-Array auf dem Stack abgelegt? Und wird dies auch irgendwann wieder gelöscht bzw. bei jedem Aufruf der Funktion wieder erzeugt? Und welche Version macht mehr Sinn?</p>
<p>Gruß<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906072</guid><dc:creator><![CDATA[Simon Krag]]></dc:creator><pubDate>Wed, 02 Jun 2010 18:52:40 GMT</pubDate></item><item><title><![CDATA[Reply to ByteArray mit new oder ohne on Wed, 02 Jun 2010 18:58:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Wird das erste BYTE-Array auf dem Stack abgelegt?</p>
</blockquote>
<p>Ja.</p>
<blockquote>
<p>Und wird dies auch irgendwann wieder gelöscht</p>
</blockquote>
<p>Ja, sobald es den Gültigkeitsbereich verlässt, in dem es angelegt wird.</p>
<blockquote>
<p>bei jedem Aufruf der Funktion wieder erzeugt?</p>
</blockquote>
<p>Ja.</p>
<blockquote>
<p>Und welche Version macht mehr Sinn?</p>
</blockquote>
<p>Wenn schon rohe Arrays, dann macht Version 1 mehr Sinn, da du dich nicht um Speicherlecks kümmern musst. Generell sollte aber eher std::vector oder std::tr1::array verwendet werden.</p>
<p>....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906076</guid><dc:creator><![CDATA[....]]></dc:creator><pubDate>Wed, 02 Jun 2010 18:58:41 GMT</pubDate></item><item><title><![CDATA[Reply to ByteArray mit new oder ohne on Wed, 02 Jun 2010 19:05:28 GMT]]></title><description><![CDATA[<p>Simon Krag schrieb:</p>
<blockquote>
<p>Wird das erste BYTE-Array auf dem Stack abgelegt?</p>
</blockquote>
<p>kommt drauf an, wo es steht.<br />
Auf Namensraumebene: Array liegt im &quot;statischen&quot; Speicher<br />
In einer Klassendef: Array ist Teil des Objekts<br />
In einer Funktion: Array liegt im &quot;automatischen&quot; Speicher (typischerweise Stack)</p>
<p>Simon Krag schrieb:</p>
<blockquote>
<p>Und wird dies auch irgendwann wieder gelöscht bzw. bei jedem Aufruf der Funktion wieder erzeugt?</p>
</blockquote>
<p>Das ist genauso wie bei &quot;normalen Variablen&quot; auch.</p>
<pre><code class="language-cpp">void foo() {
  int i;    // &lt;-- quasi wie ein 1-Elementiges Array
  int j[3]; // &lt;-- 3 ints hintereinander
}
</code></pre>
<p>Es ist wichtig zu verstehen, dass hier keine versteckte Indirektion bei so einem Array stattfindet. Es funktioniert nicht so wie in einigen anderen Sprachen (zB Java) wo man viel und implizit mit Referenzen zu tun hat. In C und C++ gibt es die Indirektion nur dann, wenn man es explizit angibt (zB durch Zeiger). Dann sollte auch klar sein, dass es da kein Speicherleck oder so geben wird.</p>
<p>Simon Krag schrieb:</p>
<blockquote>
<p>Und welche Version macht mehr Sinn?</p>
</blockquote>
<p>Eigentlich ist beides nicht so toll. Alternativen:</p>
<pre><code class="language-cpp">std::tr1::array&lt;int,23&gt; a;
std::vector&lt;int&gt; v (23);
</code></pre>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906079</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 02 Jun 2010 19:05:28 GMT</pubDate></item><item><title><![CDATA[Reply to ByteArray mit new oder ohne on Wed, 02 Jun 2010 21:05:11 GMT]]></title><description><![CDATA[<p>Die Antwort ist letztendlich eine Frage der Anforderung.</p>
<p>Wenn es keine besonderen Anforderungen gibt, dann solltest du,<br />
wie schon erwähnt, STL Container (Vector, ...) verwenden.<br />
Die STL ist sehr mächtig und man kann 'flott' was programmieren was viele Daten behandeln kann.<br />
Das kann dann aber auch genauso 'flott' recht langsam werden.</p>
<p>STL Container arbeiten (weines Wissen) immer mit dem Heap.<br />
Heap Speicher ist deutlich langsamer als Stack Speicher und<br />
es gibt auch noch Effekte wie 'Heap Fragmentierung'.<br />
Objkete mit temporärem Charackter sind bei Performace relevanten Anwendungen oft sinnvoller auf dem Stack angelegt.</p>
<p>Leider bietet die STL meines Wissens nach nicht die Möglichkeit den Stack stäker einzubeziehen, was bei mir schon mal öfters dazu führt,<br />
das ich nicht immer STL verwende.</p>
<p>Weiss jemand mehr ?</p>
<p>Danke Gruß Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906111</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 02 Jun 2010 21:05:11 GMT</pubDate></item><item><title><![CDATA[Reply to ByteArray mit new oder ohne on Wed, 02 Jun 2010 21:19:01 GMT]]></title><description><![CDATA[<p>Frank Erdorf schrieb:</p>
<blockquote>
<p>Weiss jemand mehr ?</p>
</blockquote>
<p>Ja.<br />
Dafür gibt es std::tr1::array&lt;int,23&gt; //liegt auf dem stack!</p>
<p>Außerdem will man mit 400 Bytes meistens auch was spannendes machen. Wenn es nicht bloß mal hin- und herkopieren ist, sondern auch noch was gerechnet wird, sind ganz flott die Kosten für new/delete unter einem Prozent und man kann sie ruhig zahlen, um einfach nicht in die Nähe eines Stack Overflows zu kommen.<br />
Bei 400 in einer nicht-rekursiven Funktion drängt es mich aber auch ganz stark zum Stack.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906114</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 02 Jun 2010 21:19:01 GMT</pubDate></item></channel></rss>