<?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[Optimierungshilfe gesucht für Array und Zeiger]]></title><description><![CDATA[<p>Hi</p>
<p>Habe mit dem Profiler gemerkt, das ich viele Aufrufe auf den Operator[] einer Klasse verbringe. Der ganze Code ist aus der <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39489.html" rel="nofollow">FAQ zu 2D Arrays</a>.<br />
Die Funktion sieht so aus</p>
<pre><code class="language-cpp">int* operator[](int Zeile)
{
    return &amp; pArr[Zeile * Cols];
}
</code></pre>
<p>Dazu noch der Assemblercode</p>
<pre><code class="language-asm">;int* operator[](int Zeile)
;{
push ebp
mov ebp,esp
sub esp,44h
push ebx
push esi
push edi
mov [ebp-04h],ecx
;return &amp; pArr[Zeile * Cols];
mov eax,[ebp-04h]
mov ecx,[ebp+08h]
imul ecx,[eax+08h]
mov edx,[ebp-04h]
mov eax,[edx]
lea eax,[eax+ecx*4]    ;Die meiste Zeit verbringt er hier
;}
</code></pre>
<p>Kann mir bitte jemand helfen, den Zugriff aufs Array zu optimieren?<br />
Wär supi <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/topic/157528/optimierungshilfe-gesucht-für-array-und-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 08:29:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157528.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Aug 2006 22:08:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Optimierungshilfe gesucht für Array und Zeiger on Sat, 26 Aug 2006 22:08:31 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Habe mit dem Profiler gemerkt, das ich viele Aufrufe auf den Operator[] einer Klasse verbringe. Der ganze Code ist aus der <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39489.html" rel="nofollow">FAQ zu 2D Arrays</a>.<br />
Die Funktion sieht so aus</p>
<pre><code class="language-cpp">int* operator[](int Zeile)
{
    return &amp; pArr[Zeile * Cols];
}
</code></pre>
<p>Dazu noch der Assemblercode</p>
<pre><code class="language-asm">;int* operator[](int Zeile)
;{
push ebp
mov ebp,esp
sub esp,44h
push ebx
push esi
push edi
mov [ebp-04h],ecx
;return &amp; pArr[Zeile * Cols];
mov eax,[ebp-04h]
mov ecx,[ebp+08h]
imul ecx,[eax+08h]
mov edx,[ebp-04h]
mov eax,[edx]
lea eax,[eax+ecx*4]    ;Die meiste Zeit verbringt er hier
;}
</code></pre>
<p>Kann mir bitte jemand helfen, den Zugriff aufs Array zu optimieren?<br />
Wär supi <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/1125179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125179</guid><dc:creator><![CDATA[sc.]]></dc:creator><pubDate>Sat, 26 Aug 2006 22:08:31 GMT</pubDate></item><item><title><![CDATA[Reply to Optimierungshilfe gesucht für Array und Zeiger on Sun, 27 Aug 2006 04:53:40 GMT]]></title><description><![CDATA[<p>mach es inline und aktiviere die optimierung durch den compiler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125209</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 27 Aug 2006 04:53:40 GMT</pubDate></item><item><title><![CDATA[Reply to Optimierungshilfe gesucht für Array und Zeiger on Sun, 27 Aug 2006 11:40:51 GMT]]></title><description><![CDATA[<p>So, das half, danke.<br />
Jetzt hängt er wo anders zu lange rum.<br />
Für die befüllung des 2D Arrays hab ich ne doppelte for Schleife:</p>
<pre><code class="language-cpp">for( int i = 0; i &lt; n; ++i ) {
    for( int j = 0; j &lt; n; ++j ) {
        2DArray.set( i, j, 1 );
    }
}
</code></pre>
<pre><code class="language-asm">;for( int i = 0; i &lt; n; ++i ) {
mov [ebp-20h],00000000h
jmp $+0bh (0x411c1f)
mov eax,[ebp-20h]
add eax,01h
mov [ebp-20h],eax
mov eax,[ebp-20h]
cmp eax,[ebp-10h]
jnl $+4eh (0x411c73)
;for( int j = 0; j &lt; n; ++j ) {
mov [ebp-24h],00000000h
jmp $+0bh (0x411c39)
mov eax,[ebp-24h]
add eax,01h          ;hier verbraucht es die meiste Zeit
mov [ebp-24h],eax
mov eax,[ebp-24h]
cmp eax,[ebp-10h]
jnl $+32h (0x411c71)
</code></pre>
<p>Kann ich wohl nicht optimieren oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125289</guid><dc:creator><![CDATA[sc.]]></dc:creator><pubDate>Sun, 27 Aug 2006 11:40:51 GMT</pubDate></item><item><title><![CDATA[Reply to Optimierungshilfe gesucht für Array und Zeiger on Sun, 27 Aug 2006 12:17:13 GMT]]></title><description><![CDATA[<p>@sc.<br />
mal so was zum thema sicherheit:</p>
<pre><code class="language-cpp">int* operator[](unsigned int Zeile)
{
    if (!pArr) return 0;

    if (Zeile &gt;= Cols) return 0;

    return &amp; pArr[Zeile * Cols];
}
</code></pre>
<p>unsigned aus dem einfachen Grund: Negative Arraypositionen gibt es nicht. Bei for-Schleifen die vorallem Rückwärtszählen ein sehr großes Sicherheitsrisiko!</p>
<p>Testen ob pArr gültig ist, man möchte ja nicht auf nicht vorhandenen Speicher zugreifen</p>
<p>Testen ob der Wert für Zeile gültig ist, man möchte ja keine Zugriffsverletzung machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125315</guid><dc:creator><![CDATA[&#x27;&#x27;&#x27;]]></dc:creator><pubDate>Sun, 27 Aug 2006 12:17:13 GMT</pubDate></item><item><title><![CDATA[Reply to Optimierungshilfe gesucht für Array und Zeiger on Mon, 28 Aug 2006 09:06:54 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">for( int i = 0; i &lt; n; ++i ) { 
    for( int j = 0; j &lt; n; ++j ) { 
        2DArray.set( i, j, 1 ); 
    } 
}
</code></pre>
</blockquote>
<p>Wenn du obiges noch optimieren willst, dann solltest du hier entweder die set-Methode inlinen oder aber eine z.B. Methode fill schreiben, welche alle Elementes des Arrays auf einen Wert (hier 'l') setzt. Dann sparst du den Methodenaufruf (Funktioniert aber nur, wenn 'l' konstant ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125946</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 28 Aug 2006 09:06:54 GMT</pubDate></item><item><title><![CDATA[Reply to Optimierungshilfe gesucht für Array und Zeiger on Mon, 28 Aug 2006 10:40:33 GMT]]></title><description><![CDATA[<p>Nicht ganz richtig:</p>
<p>''' schrieb:</p>
<blockquote>
<p>@sc.<br />
mal so was zum thema sicherheit:</p>
<pre><code class="language-cpp">int* operator[](unsigned int Zeile)
{
    if (!pArr) return 0;

    if (Zeile &gt;= Cols) return 0;

    return &amp; pArr[Zeile * Cols];
}
</code></pre>
<p>Testen ob der Wert für Zeile gültig ist, man möchte ja keine Zugriffsverletzung machen.</p>
</blockquote>
<pre><code class="language-cpp">if (Zeile &gt;= Cols) return 0;
</code></pre>
<p>Ist falsch, sonst wäre ja ein Zugriff auf ein 10 x 3 Array an der Stelle [7][1] nicht möglich.</p>
<p>Wenn schon (klingt sinnvoll...), dann:</p>
<pre><code class="language-cpp">if (Zeile &gt;= Rows) return 0;
</code></pre>
<p>(bezieht sich alles auf 2. aus <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39489.html" rel="nofollow">diesem Thread</a>)</p>
<p>Gruß,<br />
Dong</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1126010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1126010</guid><dc:creator><![CDATA[dong]]></dc:creator><pubDate>Mon, 28 Aug 2006 10:40:33 GMT</pubDate></item></channel></rss>