<?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[Dynamisches Array]]></title><description><![CDATA[<p>Hallo Leute.<br />
Habe mal ne frage zu den dynamischen Arrays und zwar, kann ich bei einem Array, welches ich dynamisch erstelle die Dimension mit einem nicht konstanten Ausdruck initialisieren?<br />
Beispiel:</p>
<pre><code class="language-cpp">/* dynamic_array */

#include &lt;iostream&gt;

using namespace std;

int main()
{
    int i;
    cin &gt;&gt; i;
    int *ptr = new int[i];

    return 0;
}
</code></pre>
<p>Vielen Dank für jede Hilfe <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>-GhostfaceChilla-</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/306902/dynamisches-array</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 03:42:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306902.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Aug 2012 10:43:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamisches Array on Fri, 10 Aug 2012 10:43:49 GMT]]></title><description><![CDATA[<p>Hallo Leute.<br />
Habe mal ne frage zu den dynamischen Arrays und zwar, kann ich bei einem Array, welches ich dynamisch erstelle die Dimension mit einem nicht konstanten Ausdruck initialisieren?<br />
Beispiel:</p>
<pre><code class="language-cpp">/* dynamic_array */

#include &lt;iostream&gt;

using namespace std;

int main()
{
    int i;
    cin &gt;&gt; i;
    int *ptr = new int[i];

    return 0;
}
</code></pre>
<p>Vielen Dank für jede Hilfe <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>-GhostfaceChilla-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240639</guid><dc:creator><![CDATA[GhostfaceChilla]]></dc:creator><pubDate>Fri, 10 Aug 2012 10:43:49 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Fri, 10 Aug 2012 10:46:44 GMT]]></title><description><![CDATA[<p>GhostfaceChilla schrieb:</p>
<blockquote>
<p>Hallo Leute.<br />
Habe mal ne frage zu den dynamischen Arrays und zwar, kann ich bei einem Array, welches ich dynamisch erstelle die Dimension mit einem nicht konstanten Ausdruck initialisieren?</p>
</blockquote>
<p>Ja, das darfst du. Es ist erlaubt. Dennoch solltest du dir mal <code>std::vector</code> anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240641</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Fri, 10 Aug 2012 10:46:44 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Fri, 10 Aug 2012 10:48:14 GMT]]></title><description><![CDATA[<p>Und vergiß niemals <code>delete[]</code> . <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/2240642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240642</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Fri, 10 Aug 2012 10:48:14 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Fri, 10 Aug 2012 10:48:59 GMT]]></title><description><![CDATA[<p>Danke <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="🙂"
    /><br />
Ja vector schon klar, aber wollte auch mal bisschen mit den Arrays rumprobieren <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="🙂"
    /><br />
Aber warum kann ich die Arrays so initialisieren? Braucht man nicht einen konstanten Ausdruck normalerweise?</p>
<p>-GhostfaceChilla-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240643</guid><dc:creator><![CDATA[GhostfaceChilla]]></dc:creator><pubDate>Fri, 10 Aug 2012 10:48:59 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Fri, 10 Aug 2012 11:01:55 GMT]]></title><description><![CDATA[<p>GhostfaceChilla schrieb:</p>
<blockquote>
<p>Aber warum kann ich die Arrays so initialisieren? Braucht man nicht einen konstanten Ausdruck normalerweise?</p>
</blockquote>
<p>Hmm, die Frage sollte eher lauten, wieso die Größe bei nicht-dynamischen Arrays überhaupt ein konstanter Ausdruck sein muss. In <code>C</code> ist das ja vollkommen in Ordnung, wieso aber in <code>C++</code> nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240648</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Fri, 10 Aug 2012 11:01:55 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 01:47:44 GMT]]></title><description><![CDATA[<p>Warum?</p>
<p><code>C++ != C</code></p>
<p>Sollte aber ein alter Hut sein, diese Information. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240893</guid><dc:creator><![CDATA[Artchi@logedOff]]></dc:creator><pubDate>Sat, 11 Aug 2012 01:47:44 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 02:40:44 GMT]]></title><description><![CDATA[<p>out schrieb:</p>
<blockquote>
<p>Und vergiß niemals <code>delete[]</code> . <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>
</blockquote>
<p>Lieber RAII verstehen, ansonsten ist das eh nie exception sicher, auch wenn man nichts vergisst. (Da ist es schon wieder. :D)</p>
<p>GhostfaceChilla schrieb:</p>
<blockquote>
<p>Aber warum kann ich die Arrays so initialisieren? Braucht man nicht einen konstanten Ausdruck normalerweise?</p>
</blockquote>
<p>Ehm.. weil das.. für diesen Zweck.. da ist. Irgendwie, irgendwie ginge es aber auch anders. Insofern hat out schon recht.</p>
<p>out schrieb:</p>
<blockquote>
<p>Hmm, die Frage sollte eher lauten, wieso die Größe bei nicht-dynamischen Arrays überhaupt ein konstanter Ausdruck sein muss. In C ist das ja vollkommen in Ordnung, wieso aber in C++ nicht?</p>
</blockquote>
<p>Na ja, C89 kennt jetzt noch keine VLAs. Offen gesagt würde ich mir das für C++ auch nicht wünschen. Der Quatsch macht nur Ärger. Was ich allerdings tatsächlich vermisse ist alloca().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240898</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 11 Aug 2012 02:40:44 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 11:38:00 GMT]]></title><description><![CDATA[<blockquote>
<p>Aber warum kann ich die Arrays so initialisieren? Braucht man nicht einen konstanten Ausdruck normalerweise?</p>
</blockquote>
<p>Wieso hat noch keiner gesagt, dass das VLAs ein GCC-Feature sind?</p>
<p>Edit²: Also, VL-Stackarrays, ne.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240930</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 11 Aug 2012 11:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 11:36:09 GMT]]></title><description><![CDATA[<p>GhostfaceChilla schrieb:</p>
<blockquote>
<p>Aber warum kann ich die Arrays so initialisieren? Braucht man nicht einen konstanten Ausdruck normalerweise?</p>
</blockquote>
<p>ptr ist kein Array sondern ein Zeiger!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240967</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 11 Aug 2012 11:36:09 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 12:07:42 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Wieso hat noch keiner gesagt, dass das VLAs ein GCC-Feature sind?</p>
</blockquote>
<p>Weil die Aussage falsch ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240973</guid><dc:creator><![CDATA[truuth]]></dc:creator><pubDate>Sat, 11 Aug 2012 12:07:42 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 12:43:50 GMT]]></title><description><![CDATA[<p>GhostfaceChilla schrieb:</p>
<blockquote>
<p>Danke <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="🙂"
    /><br />
Ja vector schon klar, aber wollte auch mal bisschen mit den Arrays rumprobieren <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="🙂"
    /><br />
Aber warum kann ich die Arrays so initialisieren? Braucht man nicht einen konstanten Ausdruck normalerweise?</p>
<p>-GhostfaceChilla-</p>
</blockquote>
<p>Weil normale, micht mit new allozierte Speicherbereiche auf dem Stack angelegt werden, und zwar zu Compile-Zeit und nicht Laufzeit. Daher muss der Compiler vorher wissen, wie groß die einzelnen anzulegende Bereiche sein sollen -&gt; konstanter Ausdruck, konstante und bekannte Größe.<br />
Mit new allozierte Speicherbereiche werden auf dem Heap angelegt, zur Laufzeit. Daher interessiert es den Compiler zu Compile-Zeit nicht, wie groß dein Array ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240983</guid><dc:creator><![CDATA[Yea]]></dc:creator><pubDate>Sat, 11 Aug 2012 12:43:50 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 15:42:04 GMT]]></title><description><![CDATA[<p>truuth schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Wieso hat noch keiner gesagt, dass das VLAs ein GCC-Feature sind?</p>
</blockquote>
<p>Weil die Aussage falsch ist?</p>
</blockquote>
<p>Ach halt die Klappe...<br />
Haste meine Editierung nicht gesehen oder hast du nur keine Ahnung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241017</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 11 Aug 2012 15:42:04 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 16:32:39 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>truuth schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Wieso hat noch keiner gesagt, dass das VLAs ein GCC-Feature sind?</p>
</blockquote>
<p>Weil die Aussage falsch ist?</p>
</blockquote>
<p>Ach halt die Klappe...<br />
Haste meine Editierung nicht gesehen oder hast du nur keine Ahnung?</p>
</blockquote>
<p>Du lebst offensichtlich in C89. VLAs sind im C99-Standard dazugekommen. Also sind sie nicht ausschliesslich GCC-Feature. (In C11 sind sie de facto wieder rausgeflogen, aber damit sind sie immer noch Standard in C99.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241032</guid><dc:creator><![CDATA[truuth]]></dc:creator><pubDate>Sat, 11 Aug 2012 16:32:39 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 16:43:30 GMT]]></title><description><![CDATA[<p>truuth schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>truuth schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Wieso hat noch keiner gesagt, dass das VLAs ein GCC-Feature sind?</p>
</blockquote>
<p>Weil die Aussage falsch ist?</p>
</blockquote>
<p>Ach halt die Klappe...<br />
Haste meine Editierung nicht gesehen oder hast du nur keine Ahnung?</p>
</blockquote>
<p>Du lebst offensichtlich in C89. VLAs sind im C99-Standard dazugekommen.</p>
</blockquote>
<p>Schau mal <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf" rel="nofollow">hier</a>, bei 8.3.4, direkt Klausel 1.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241033</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 11 Aug 2012 16:43:30 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 17:42:20 GMT]]></title><description><![CDATA[<p>truuth schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>truuth schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Wieso hat noch keiner gesagt, dass das VLAs ein GCC-Feature sind?</p>
</blockquote>
<p>Weil die Aussage falsch ist?</p>
</blockquote>
<p>Ach halt die Klappe...<br />
Haste meine Editierung nicht gesehen oder hast du nur keine Ahnung?</p>
</blockquote>
<p>Du lebst offensichtlich in C89. VLAs sind im C99-Standard dazugekommen. Also sind sie nicht ausschliesslich GCC-Feature. (In C11 sind sie de facto wieder rausgeflogen, aber damit sind sie immer noch Standard in C99.)</p>
</blockquote>
<p>Ich dachte, das wär hier das C++ Subforum. In C++ gibt es offiziell keine VLAs. Der GCC bietet das als <strong>Extension für C++</strong> an. Aber dass sie in C11 &quot;de facto wieder rausgeflogen&quot; seien, ist mir neu. Interessant. <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/2241040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241040</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 11 Aug 2012 17:42:20 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 18:03:12 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Aber dass sie in C11 &quot;de facto wieder rausgeflogen&quot; seien, ist mir neu. Interessant. <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>
</blockquote>
<p>Habs mal für dich rausgekramt:</p>
<p>N1570 6.7.6.2 Klausel 4 schrieb:</p>
<blockquote>
<p>Variable length arrays are a conditional feature that implementations need not support.</p>
</blockquote>
<p><strong>Wenn</strong> die Implementierung das Feature unterstützt, dann ist das folgende Makro definiert (als <code>1</code> ):</p>
<pre><code class="language-cpp">__STDC_NO_VLA__
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2241043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241043</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 11 Aug 2012 18:03:12 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 22:59:48 GMT]]></title><description><![CDATA[<p>Yea schrieb:</p>
<blockquote>
<p>Weil normale, micht mit new allozierte Speicherbereiche auf dem Stack angelegt werden, und zwar zu Compile-Zeit und nicht Laufzeit. Daher muss der Compiler vorher wissen, wie groß die einzelnen anzulegende Bereiche sein sollen -&gt; konstanter Ausdruck, konstante und bekannte Größe.<br />
Mit new allozierte Speicherbereiche werden auf dem Heap angelegt, zur Laufzeit. Daher interessiert es den Compiler zu Compile-Zeit nicht, wie groß dein Array ist.</p>
</blockquote>
<p>Ah ok,danke <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>-GhostfaceChilla-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241093</guid><dc:creator><![CDATA[GhostfaceChilla]]></dc:creator><pubDate>Sat, 11 Aug 2012 22:59:48 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sat, 11 Aug 2012 23:39:36 GMT]]></title><description><![CDATA[<p>Yea schrieb:</p>
<blockquote>
<p>Weil normale, micht mit new allozierte Speicherbereiche auf dem Stack angelegt werden, und zwar zu Compile-Zeit und nicht Laufzeit. Daher muss der Compiler vorher wissen, wie groß die einzelnen anzulegende Bereiche sein sollen -&gt; konstanter Ausdruck, konstante und bekannte Größe.<br />
Mit new allozierte Speicherbereiche werden auf dem Heap angelegt, zur Laufzeit. Daher interessiert es den Compiler zu Compile-Zeit nicht, wie groß dein Array ist.</p>
</blockquote>
<p>Die Schlussfolgerung ist de facto aber falsch. Natürlich ist es auch möglich, den Stackzeiger mit erst zur Laufzeit bekannten Größen zu manipulieren. Es macht nicht mal nen Unterschied. Insofern ist eine technische Erklärung hier völlig fehl am Platz. Warum C++ sich dafür entschieden hat das nicht zu unterstützen, ist selbstverständlich am Typsystem festzumachen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241097</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 11 Aug 2012 23:39:36 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sun, 12 Aug 2012 15:41:12 GMT]]></title><description><![CDATA[<p>Artchi@logedOff schrieb:</p>
<blockquote>
<p>Warum?</p>
<p><code>C++ != C</code></p>
<p>Sollte aber ein alter Hut sein, diese Information. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Ja, aber was haben sich die Leute, die den C++-Standard entwickeln, dabei gedacht? Es ist doch kaum Mehraufwand beim Compilerbau nicht-dynamische Arrays nicht-konstanter Größe zuzulassen. Und solange die Größe klein ist, wäre es sogar effizienter als einen std::vector bzw. ein new[]-Array zu erstellen.</p>
<p>Yea schrieb:</p>
<blockquote>
<p>Weil normale, nicht mit new allozierte Speicherbereiche auf dem Stack angelegt werden, und zwar zu Compile-Zeit und nicht Laufzeit.</p>
</blockquote>
<p>Das ist falsch oder du hast dich komisch ausgedrückt und meinst etwas anderes. Die nicht mit new allozierte Speicherbereiche werden doch erst zur Laufzeit auf den Stack gelegt und nicht schon vorher, denn es gibt ja sowas wie Rekursion. Es steht allerdings fest, um wie viel Bytes der Stackpointer verkleinert/vergrößert wird. Dieser Wert könnte aber (rein theoretisch) variabel sein. Allerdings kann man dann nicht beim Betreten einer Funktion wissen, um wie viel der Stack vergrößert wird, da dieser Wert erst berechnet werden muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241209</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Sun, 12 Aug 2012 15:41:12 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sun, 12 Aug 2012 16:21:23 GMT]]></title><description><![CDATA[<p>Ramanujan schrieb:</p>
<blockquote>
<p>Artchi@logedOff schrieb:</p>
<blockquote>
<p>Warum?</p>
<p><code>C++ != C</code></p>
<p>Sollte aber ein alter Hut sein, diese Information. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Ja, aber was haben sich die Leute, die den C++-Standard entwickeln, dabei gedacht? Es ist doch kaum Mehraufwand beim Compilerbau nicht-dynamische Arrays nicht-konstanter Größe zuzulassen. Und solange die Größe klein ist, wäre es sogar effizienter als einen std::vector bzw. ein new[]-Array zu erstellen.</p>
</blockquote>
<p>Letzteres stimmt, vorheriges ist Quatsch.</p>
<p>Ramanujan schrieb:</p>
<blockquote>
<p>Yea schrieb:</p>
<blockquote>
<p>Weil normale, nicht mit new allozierte Speicherbereiche auf dem Stack angelegt werden, und zwar zu Compile-Zeit und nicht Laufzeit.</p>
</blockquote>
<p>Das ist falsch oder du hast dich komisch ausgedrückt und meinst etwas anderes. Die nicht mit new allozierte Speicherbereiche werden doch erst zur Laufzeit auf den Stack gelegt und nicht schon vorher, denn es gibt ja sowas wie Rekursion.</p>
</blockquote>
<p>Ihr beide meint es wohl anders, denn deine Begründung ist ebenfalls Quatsch. Es gibt vor der &quot;Laufzeit&quot; oder der Ausführung der PE überhaupt keinen &quot;Stack&quot;.</p>
<p>Ramanujan schrieb:</p>
<blockquote>
<p>Dieser Wert könnte aber (rein theoretisch) variabel sein. Allerdings kann man dann nicht beim Betreten einer Funktion wissen, um wie viel der Stack vergrößert wird.</p>
</blockquote>
<p>Soso, der Stack kann also vergrößert werden? Dann brauchen wir in C ja kein <code>malloc</code> mehr, <code>alloca</code> tuts schon <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/2241219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241219</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 12 Aug 2012 16:21:23 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sun, 12 Aug 2012 16:54:37 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Ramanujan schrieb:</p>
<blockquote>
<p>Dieser Wert könnte aber (rein theoretisch) variabel sein. Allerdings kann man dann nicht beim Betreten einer Funktion wissen, um wie viel der Stack vergrößert wird.</p>
</blockquote>
<p>Soso, der Stack kann also vergrößert werden? Dann brauchen wir in C ja kein <code>malloc</code> mehr, <code>alloca</code> tuts schon <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>
</blockquote>
<p>Nein. An der Aussage von Ramanujan ist nichtmal was falsch. In der Tat kann der Stack vergrößert werden und das Betriebssystem arbeitet auch genau so. Zwar gibt man am Anfang an, wie groß der Stack maximal werden wird, das Betriebssystem alloziert trotzdem erst Stück für Stück die benötigten pages. Und natürlich gibt es noch weitere Unterschiede zwischen alloca und malloc, zum Beispiel weil alloca nur den aktuellen stackframe ändern kann und weil der Stack prinzipbedingt einige weitere Einschränkungen hat - zum beispiel das auf dem stack allozierter Speicher nicht länger existieren kann, als der Stackframe in dem er sich befindet.</p>
<p>//edit die Implementation von alloca und VLAs ist nicht einmal sonderlich komplex. Man muss den Stackframe anders aufbauen und zusätzlichen Aufräumcode erzeugen, aber das ist alles keine Magie. (ich kann allerdings nicht mehr beschreiben wie genau das ging, Sprachimplementierung ist ewig her, war aber einfach genug um vom Prinzip auf 2 Tafeln zu passen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241226</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 12 Aug 2012 16:54:37 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sun, 12 Aug 2012 16:55:32 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Ramanujan schrieb:</p>
<blockquote>
<p>Dieser Wert könnte aber (rein theoretisch) variabel sein. Allerdings kann man dann nicht beim Betreten einer Funktion wissen, um wie viel der Stack vergrößert wird.</p>
</blockquote>
<p>Soso, der Stack kann also vergrößert werden? Dann brauchen wir in C ja kein <code>malloc</code> mehr, <code>alloca</code> tuts schon <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>
</blockquote>
<p>Nein. An der Aussage von Ramanujan ist nichtmal was falsch. In der Tat kann der Stack vergrößert werden und das Betriebssystem arbeitet auch genau so. Zwar gibt man am Anfang an, wie groß der Stack maximal werden wird, das Betriebssystem alloziert trotzdem erst Stück für Stück die benötigten pages. Und natürlich gibt es noch weitere Unterschiede zwischen alloca und malloc, zum Beispiel weil alloca nur den aktuellen stackframe ändern kann und weil der Stack prinzipbedingt einige weitere Einschränkungen hat - zum beispiel das auf dem stack allozierter Speicher nicht länger existieren kann, als der Stackframe in dem er sich befindet.</p>
</blockquote>
<p>o.O<br />
Gut, da hab ich wohl viel zu tief gegriffen. Dachte, der Stack ist von vornherein so groß wie er immer ist (ca. 1 - 10 MB), aber anscheinend wäre das ja bei näherem überlegen auch reichlich bescheuert...?</p>
<p>Edit: Doch das &quot;(rein theoretisch)&quot; kann er weglassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241228</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 12 Aug 2012 16:55:32 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sun, 12 Aug 2012 17:00:18 GMT]]></title><description><![CDATA[<p>Ja, da ist auch etwas Magie dahinter, die auf den virtuellen Addresslisten der CPU basiert.</p>
<p>Das Programm selbst allokiert niemals Speicher für den Stack. Stattdessen wird ausgenutzt, dass die CPU eine Hardware-Exception schmeißt, wenn auf eine virtuelle Addresse zugegriffen wird, die nicht vergeben ist. Das Betriebssystem überprüft dann, ob die Addresse im Stackbereich liegt und wenn dies der Fall ist, wird eine weitere Page allokiert und auf der CPU dieser virtuelle Speicherbereich freigeschaltet.</p>
<p>Im Kontext dieses Threads meinte Ramanujan aber nur den Stackpointer, bzw den aktuellen Stackframe, der kann natürlich beliebig vergrößert werden, weil der Frame nur eine Datenstruktur ist, die das Programm bei Eintritt in zum Beispiel eine Funktion automatisch erzeugt. Und dort irgendwo einen Wert zu überschreiben und den Stackpointe rzu erhöhen ist kein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241229</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 12 Aug 2012 17:00:18 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array on Sun, 12 Aug 2012 18:28:33 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Im Kontext dieses Threads meinte Ramanujan aber nur den Stackpointer</p>
</blockquote>
<p>Ja, genau. Meine Formulierung war leider etwas unpräzise.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241254</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Sun, 12 Aug 2012 18:28:33 GMT</pubDate></item></channel></rss>