stackspeicher größe – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self stackspeicher größe Thu, 08 Sep 05 09:51:51 Z https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870116#m870116 https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870116#m870116 <p>hallo,</p> <p>weiss jemand wie javascript seinen stackspeicher verwaltet, bzw. wo die grenzen liegen und wie man sie evtl. auch umgehen kann?</p> <p>die erste funktion läuft durch und speichert alle 100000 einträge in dem array ohne überlauf.</p> <p>die zweite rekursive funktion dagegen verursacht schon bei 1000 (firefox) bzw 1124 (ie) durchläufen einen overflow des stackspeichers:</p> <pre><code class="block language-javascript"> <span class="token keyword">function</span> <span class="token function">test</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> arr <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span><span class="token punctuation">(</span>i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator"><</span><span class="token number">100000</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> arr<span class="token punctuation">[</span>arr<span class="token punctuation">.</span>length<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">"X"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token function">test</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">rek</span><span class="token punctuation">(</span><span class="token parameter">i<span class="token punctuation">,</span>arr</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>i<span class="token punctuation">)</span> i<span class="token operator">=</span><span class="token string">""</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>arr<span class="token punctuation">)</span> arr<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">Array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>i<span class="token punctuation">.</span>length<span class="token operator"><=</span><span class="token number">1125</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> i<span class="token operator">+=</span><span class="token string">"X"</span><span class="token punctuation">;</span> document<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>arr<span class="token punctuation">.</span>length<span class="token operator">+</span><span class="token string">" | "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> document<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>i<span class="token operator">+</span><span class="token string">"<br>"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> arr<span class="token punctuation">[</span>arr<span class="token punctuation">.</span>length<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">"X"</span><span class="token punctuation">;</span> <span class="token function">rek</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span>arr<span class="token punctuation">)</span><span class="token punctuation">;</span> arr<span class="token punctuation">.</span>length <span class="token operator">=</span> arr<span class="token punctuation">.</span>length<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span> document<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>arr<span class="token punctuation">.</span>length<span class="token operator">+</span><span class="token string">" | "</span><span class="token punctuation">)</span><span class="token punctuation">;</span> document<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>i<span class="token operator">+</span><span class="token string">"<br>"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token function">rek</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>vielleicht hat ja jemand bissle mehr ahnung davon.<br> wär interessant, wie man da am besten vorgehen könnte, ohne zb. mit einer rekursion dieser art so früh an grenzen zu stoßen, oder einfach generell bissle mehr über das ganze zu wissen.</p> <p>gruß!</p> stackspeicher größe Thu, 08 Sep 05 10:19:58 Z https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870117#m870117 https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870117#m870117 <p>hi,</p> <blockquote> <pre><code class="block language-javascript"></code></pre> </blockquote> <blockquote> <p>function test()<br> {<br> arr = new Array();<br> for(i=0;i<100000;i++)<br> {<br>   arr[arr.length] = "X";<br> }<br> }</p> </blockquote> <pre><code class="block"> was macht diese funktion? hunderttausend mal dem array-element mit dem index 0 den wert "X" zuweisen ...? (möchte da vielleicht der schleifenzähler i als array-index in den eckigen klammern stehen, statt arr.length?) gruß, wahsaga -- /voodoo.css: #GeorgeWBush { position:absolute; bottom:-6ft; } </code></pre> stackspeicher größe Thu, 08 Sep 05 10:53:38 Z https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870121#m870121 https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870121#m870121 <p>Hallo wahsaga,</p> <blockquote> <blockquote> <p>arr = new Array();<br> for(i=0;i<100000;i++)<br> {<br>   arr[arr.length] = "X";<br> }</p> </blockquote> </blockquote> <blockquote> <p>was macht diese funktion?<br> hunderttausend mal dem array-element mit dem index 0 den wert "X" zuweisen ...?</p> </blockquote> <p>Nö, hunderttausendmal ein Element am Ende hinzufügen. Herrje, da ist es doch schon wieder, das berühmte ±1-Problem mit Indizes und so...</p> <blockquote> <p>(möchte da vielleicht der schleifenzähler i als array-index in den eckigen klammern stehen, statt arr.length?)</p> </blockquote> <p>Das würde in diesem speziellen Fall exakt dasselbe bewirken. ;-)<br> So long,</p> <p>Martin</p> stackspeicher größe Thu, 08 Sep 05 11:09:35 Z https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870119#m870119 https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870119#m870119 <p>你好 wahsaga,</p> <blockquote> <blockquote> <pre><code class="block language-javascript"></code></pre> </blockquote> </blockquote> <blockquote> <blockquote> <p>function test()<br> {<br> arr = new Array();<br> for(i=0;i<100000;i++)<br> {<br>   arr[arr.length] = "X";<br> }<br> }</p> </blockquote> </blockquote> <pre><code class="block"> > > was macht diese funktion? > hunderttausend mal dem array-element mit dem index 0 den wert "X" > zuweisen ...? arr.length ist immer eins größer als die Anzahl Elemente. Damit wächst der Array bei jedem Schleifendurchlauf um ein Element: erster Durchlauf 0, zweiter Durchlauf 1, dritter Durchlauf 2, … 再见,  克里斯蒂安 -- Wenn der Schüler bereit ist, erscheint der Meister. <http://wwwtech.de/> </code></pre> stackspeicher größe Thu, 08 Sep 05 11:12:09 Z https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870118#m870118 https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870118#m870118 <blockquote> <p>(möchte da vielleicht der schleifenzähler i als array-index in den eckigen klammern stehen, statt arr.length?)</p> </blockquote> <p>ist doch nurn schnell hingeschriebenes beispiel ;)</p> stackspeicher größe Thu, 08 Sep 05 16:31:17 Z https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870120#m870120 https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870120#m870120 <p>hi,</p> <blockquote> <p>arr.length ist immer eins größer als die Anzahl Elemente.</p> </blockquote> <p>Ach ja, verflixt, stimmt ja :-)</p> <p>gruß,<br> wahsaga</p> <div class="signature">-- <br> /voodoo.css:<br> #GeorgeWBush { position:absolute; bottom:-6ft; } </div> stackspeicher größe Thu, 08 Sep 05 11:13:53 Z https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870122#m870122 https://forum.selfhtml.org/self/2005/sep/8/stackspeicher-groesse/870122#m870122 <blockquote> <p>Das würde in diesem speziellen Fall exakt dasselbe bewirken. ;-)<br> So long,</p> </blockquote> <p>wahsaga hatte schon recht. das ist in sonem fall quatsch es mit .length zu machen, weil es eindeutig langsamer sein wird als hier i einzusetzen.</p> <p>aber darum gings doch in dem thread nicht leudde! ;)</p>