<?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[Performance von reinterpretation zweier Bytes als short?]]></title><description><![CDATA[<p>Hi!</p>
<p>Leider bin ich in ASM sehr schwach, deshalb kann ich mir selbst kein Bild machen.</p>
<p>Ich möchte sehr oft zwei Bytes mit zwei Bytes vergleichen:</p>
<pre><code class="language-cpp">unsigned char* data = ...

// Compare-Funktion
bool SomeClass::Compare(const unsigned char* bytes)
{
    return (this-&gt;bytes[0] == bytes[0] &amp;&amp; this-&gt;bytes[1] == bytes[1]);
}

// Aufruf, sehr oft
if(obj-&gt;Compare(data))
// ...
</code></pre>
<p>Nun, einfacher wäre es aber, der Compare-Funktion short zu übergeben, allerdings müsste ich dann immer Casten. Wie kostspielig ist das?<br />
Sollte doch eigentlich egal sein, es wird ja nur anders interpretiert, nicht?<br />
Und ein Vergleich fällt dann auch weg:</p>
<pre><code class="language-cpp">// Ist das teurer?

unsigned char* data = ...

// Compare-Funktion
bool SomeClass::Compare(unsigned short shortVal)
{
    return (this-&gt;shortVal == shortVal);
}

// Aufruf, sehr oft
if(obj-&gt;Compare(*reinterpret_cast&lt;unsigned short*&gt;(data)))
// ...
</code></pre>
<p>Ist vielleicht etwas Mikrooptimierung, aber es ist nur wenig Code und der sollte so performant wie nur möglich sein.</p>
<p>Anmerkung: Ich programmiere nur für Windows, daher ist diese Casterei problemlos. Es wird immer little endian sein.</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/252035/performance-von-reinterpretation-zweier-bytes-als-short</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 04:22:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/252035.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Oct 2009 18:48:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Performance von reinterpretation zweier Bytes als short? on Tue, 13 Oct 2009 18:48:17 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Leider bin ich in ASM sehr schwach, deshalb kann ich mir selbst kein Bild machen.</p>
<p>Ich möchte sehr oft zwei Bytes mit zwei Bytes vergleichen:</p>
<pre><code class="language-cpp">unsigned char* data = ...

// Compare-Funktion
bool SomeClass::Compare(const unsigned char* bytes)
{
    return (this-&gt;bytes[0] == bytes[0] &amp;&amp; this-&gt;bytes[1] == bytes[1]);
}

// Aufruf, sehr oft
if(obj-&gt;Compare(data))
// ...
</code></pre>
<p>Nun, einfacher wäre es aber, der Compare-Funktion short zu übergeben, allerdings müsste ich dann immer Casten. Wie kostspielig ist das?<br />
Sollte doch eigentlich egal sein, es wird ja nur anders interpretiert, nicht?<br />
Und ein Vergleich fällt dann auch weg:</p>
<pre><code class="language-cpp">// Ist das teurer?

unsigned char* data = ...

// Compare-Funktion
bool SomeClass::Compare(unsigned short shortVal)
{
    return (this-&gt;shortVal == shortVal);
}

// Aufruf, sehr oft
if(obj-&gt;Compare(*reinterpret_cast&lt;unsigned short*&gt;(data)))
// ...
</code></pre>
<p>Ist vielleicht etwas Mikrooptimierung, aber es ist nur wenig Code und der sollte so performant wie nur möglich sein.</p>
<p>Anmerkung: Ich programmiere nur für Windows, daher ist diese Casterei problemlos. Es wird immer little endian sein.</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792203</guid><dc:creator><![CDATA[Cast0r]]></dc:creator><pubDate>Tue, 13 Oct 2009 18:48:17 GMT</pubDate></item><item><title><![CDATA[Reply to Performance von reinterpretation zweier Bytes als short? on Tue, 13 Oct 2009 18:57:07 GMT]]></title><description><![CDATA[<p><a href="http://www.cplusplus.com/reference/clibrary/cstring/memcmp/" rel="nofollow">http://www.cplusplus.com/reference/clibrary/cstring/memcmp/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792210</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 13 Oct 2009 18:57:07 GMT</pubDate></item><item><title><![CDATA[Reply to Performance von reinterpretation zweier Bytes als short? on Tue, 13 Oct 2009 18:57:14 GMT]]></title><description><![CDATA[<p>Es ist, wie du vermutet hast: reinterpret_cast kostet rein gar nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792211</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Tue, 13 Oct 2009 18:57:14 GMT</pubDate></item><item><title><![CDATA[Reply to Performance von reinterpretation zweier Bytes als short? on Tue, 13 Oct 2009 18:57:43 GMT]]></title><description><![CDATA[<p>ein direkter short-vergleich ist da performanter. die casterei ist zumindestens<br />
bei reinterpret_cast 100% gratis. auf assemblerebene hat sie keine auswirkunden.</p>
<p>allerdings kann es natürlich sein, dass der compiler dein konstrukt erkennt<br />
und entsprechend optimiert.</p>
<p>anstatt zu sagen: &quot;teste es&quot;, sag ich einfach mal es ist schneller, zumindestens<br />
unoptimiert.</p>
<p>tipp:<br />
caste in der funktion (einmal), das erspart das casten beim aufrufen (oft).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792212</guid><dc:creator><![CDATA[casterle]]></dc:creator><pubDate>Tue, 13 Oct 2009 18:57:43 GMT</pubDate></item><item><title><![CDATA[Reply to Performance von reinterpretation zweier Bytes als short? on Tue, 13 Oct 2009 19:05:51 GMT]]></title><description><![CDATA[<p>Ok, danke.<br />
Beim Aufruf von Compare() habe ich die Daten nur als unsigned char* zur Verfügung, ich muss also bei jedem Aufruf einmal casten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792217</guid><dc:creator><![CDATA[Cast0r]]></dc:creator><pubDate>Tue, 13 Oct 2009 19:05:51 GMT</pubDate></item><item><title><![CDATA[Reply to Performance von reinterpretation zweier Bytes als short? on Tue, 13 Oct 2009 19:06:29 GMT]]></title><description><![CDATA[<p>messen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792219</guid><dc:creator><![CDATA[einfach]]></dc:creator><pubDate>Tue, 13 Oct 2009 19:06:29 GMT</pubDate></item><item><title><![CDATA[Reply to Performance von reinterpretation zweier Bytes als short? on Wed, 14 Oct 2009 10:23:52 GMT]]></title><description><![CDATA[<p>Der Tipp ist folgendermaßen gemeint:</p>
<pre><code class="language-cpp">bool SomeClass::Compare(const unsigned char* bytes)
{
    return *reinterpret_cast&lt;unsigned short*&gt;(bytes) ==
           *reinterpret_cast&lt;unsigned short*&gt;(this-&gt;bytes);
}
</code></pre>
<p>dann brauchst du beim Aufruf nicht zu casten:</p>
<pre><code class="language-cpp">if(obj-&gt;Compare(data))
  ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1792444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792444</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 14 Oct 2009 10:23:52 GMT</pubDate></item><item><title><![CDATA[Reply to Performance von reinterpretation zweier Bytes als short? on Wed, 14 Oct 2009 13:27:45 GMT]]></title><description><![CDATA[<p>Achso ja, danke.<br />
In meinem Fall rufe ich die Funktion aber nur an einer Stelle auf, also egal <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="😉"
    /><br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792563</guid><dc:creator><![CDATA[Cast0r]]></dc:creator><pubDate>Wed, 14 Oct 2009 13:27:45 GMT</pubDate></item></channel></rss>