<?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[mehrere Elemente eines Arrays gleichzeitig kopieren]]></title><description><![CDATA[<p>Hallo!</p>
<p>Sowas hier geht doch sicherlich auch in einer Zeile, nicht wahr?<br />
Ich meine ich hätte das auch schon mal gesehen, aber leider<br />
komm ich nicht mehr drauf und finde auch nix.</p>
<pre><code class="language-cpp">point1[0] = vertices[j*3+0];
                    point1[1] = vertices[j*3+1];
                    point1[2] = vertices[j*3+2];
</code></pre>
<p>Wäre super wenn mir jemand fix helfen könnt! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261320/mehrere-elemente-eines-arrays-gleichzeitig-kopieren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 10:17:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261320.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Feb 2010 17:38:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to mehrere Elemente eines Arrays gleichzeitig kopieren on Tue, 16 Feb 2010 17:38:41 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Sowas hier geht doch sicherlich auch in einer Zeile, nicht wahr?<br />
Ich meine ich hätte das auch schon mal gesehen, aber leider<br />
komm ich nicht mehr drauf und finde auch nix.</p>
<pre><code class="language-cpp">point1[0] = vertices[j*3+0];
                    point1[1] = vertices[j*3+1];
                    point1[2] = vertices[j*3+2];
</code></pre>
<p>Wäre super wenn mir jemand fix helfen könnt! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856723</guid><dc:creator><![CDATA[Wimme]]></dc:creator><pubDate>Tue, 16 Feb 2010 17:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to mehrere Elemente eines Arrays gleichzeitig kopieren on Tue, 16 Feb 2010 20:00:38 GMT]]></title><description><![CDATA[<p><a href="http://www.cplusplus.com/reference/algorithm/copy/" rel="nofollow">std::copy</a></p>
<pre><code class="language-cpp">std::copy(&amp;vertices[j*3], &amp;vertices[j*3+3], &amp;point1[0]);
</code></pre>
<p>Und <em>falls</em> es sich um POD-Arrays handelt kann man auch <a href="http://www.cplusplus.com/reference/clibrary/cstring/memcpy/" rel="nofollow">memcpy</a> verwenden, was dir sicherlich gleich jemand erklären wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856727</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 16 Feb 2010 20:00:38 GMT</pubDate></item><item><title><![CDATA[Reply to mehrere Elemente eines Arrays gleichzeitig kopieren on Tue, 16 Feb 2010 18:49:43 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Und <em>falls</em> es sich um POD-Arrays handelt kann man auch memcpy verwenden,</p>
</blockquote>
<p>Muss man aber nicht. Das std::copy aus libstdc++ ist so schlau (erkennt hintereinander im Speicher liegende PODs), dass ein manuelles memcpy keinen Vorteil bringt.</p>
<p>#include &lt;algorithm&gt;</p>
<p>Wenn es Arrays oder Zeiger sind:</p>
<pre><code>std::copy(vertices+(j*3), vertices+(j*3+3), point1+0);
                    von              bis       wohin
</code></pre>
<p>Wenn es <code>std::vector</code> en sind:</p>
<pre><code>std::copy(vertices.begin()+(j*3), vertices.begin()+(j*3+3), point1.begin()+0);
                            von                      bis               wohin
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1856750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856750</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 16 Feb 2010 18:49:43 GMT</pubDate></item><item><title><![CDATA[Reply to mehrere Elemente eines Arrays gleichzeitig kopieren on Tue, 16 Feb 2010 19:48:33 GMT]]></title><description><![CDATA[<p>Hoppala, ich habe oben in meinem Beispiel Quelle und Ziel vertauscht. Habe es jetzt angepasst, dass es zum Beispiel in der Fragestellung passt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856777</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 16 Feb 2010 19:48:33 GMT</pubDate></item><item><title><![CDATA[Reply to mehrere Elemente eines Arrays gleichzeitig kopieren on Wed, 17 Feb 2010 00:23:59 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Muss man aber nicht. Das std::copy aus libstdc++ ist so schlau (erkennt hintereinander im Speicher liegende PODs), dass ein manuelles memcpy keinen Vorteil bringt.</p>
</blockquote>
<p>Die std::copy Implementierung die ich &quot;kenne&quot; (MSVC) ist ziemlich doof, und verlässt sich darauf, dass der Compiler erkennt dass hier PODs kopiert werden.</p>
<p>Der MSVC (getestet mit Version 9) erkennt das auch <em>halbwegs</em> (siehe unten) gut.<br />
Beispiel:</p>
<pre><code class="language-cpp">template &lt;class InIt, class OutIt&gt;
void my_copy(InIt b, InIt e, OutIt d)
{
	for (; b != e; ++b, ++d)
		*d = *b;
}

struct some_pod
{
	int a;
	int b;
}
</code></pre>
<p>Getestet mit einem Array aus jeweils 10000 Elementen:</p>
<p>char/unsigned char/signed char: <code>memcpy</code><br />
short/wchar_t: <code>rep movs (5000x dword)</code><br />
int: <code>rep movs (10000x dword)</code><br />
some_pod: <code>rep movs (20000x dword)</code></p>
<p>Mit 10001 short/wchar_t: <code>rep movs (5000x dword) + einzelnes movs (word)</code></p>
<p>Warum er nicht überall <code>memcpy</code> verwendet verstehe ich nicht so ganz...</p>
<p>Es hat auch mit der Grösse nicht viel zu tun, MSVC nimmt auch bei 200 chars <code>memcpy</code> und bei 200 shorts <code>rep movs</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856834</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 17 Feb 2010 00:23:59 GMT</pubDate></item><item><title><![CDATA[Reply to mehrere Elemente eines Arrays gleichzeitig kopieren on Wed, 17 Feb 2010 00:36:35 GMT]]></title><description><![CDATA[<p>früher war das so, daß die memcpy.asm was furchbar schlaues gemacht hat. mit supi tricks wurden die daten in viererpäckchen halt mit rep mov kopiert, aber halt gut aligned, also vorher und nachher noch null bis drei einzelbytes kopiert. war halt schneller als rep movb byteweise.<br />
aber wenn deine short-daten schon 4-byte-aligned sind, braucht man den zaubercode ja gar nicht und kann gleich losrocken. vielleicht legt er char-arrays nur 1-byte-alignes ab und stellt sich damit dann ein bein. nur mal so in den wind vermutet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856835</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 17 Feb 2010 00:36:35 GMT</pubDate></item><item><title><![CDATA[Reply to mehrere Elemente eines Arrays gleichzeitig kopieren on Wed, 17 Feb 2010 00:44:14 GMT]]></title><description><![CDATA[<p>Jo ... keine Ahnung <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>Wobei man rep movs schon noch toppen kann, auch wenn man bei perfektem Alignment etc. vergleicht. Mit den MMX/SSE Registern geht das soweit ich weiss noch einiges mehr. Dafür sind die Setup-Kosten dieser Varianten deutlich höher, zahlt sich also erst bei grösseren Blöcken aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856836</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 17 Feb 2010 00:44:14 GMT</pubDate></item><item><title><![CDATA[Reply to mehrere Elemente eines Arrays gleichzeitig kopieren on Wed, 17 Feb 2010 07:44:14 GMT]]></title><description><![CDATA[<p>Bei größeren Datenmengen müsste der Speicherzugriff der Flaschenhals sein (Latenz und Bandbreite). Der Speicher ist im Verhältnis zu heutigen CPUs sehr langsam. Das mit der Latenz ist bei so einem linearen Zugriff weniger ein Problem, weil moderne CPUs dieses Zugriffsmuster erkennen und Daten aus dem Speicher im Voraus anfordern un den Cache damit füllen.</p>
<p>(Es lohnt sich also, Daten im Speicher auf eine Art zu organisieren, dass größtenteils &quot;linear&quot; drauf zugegriffen wird, dass also keine großen/häufigen Sprünge der Adressen gemacht werden.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856868</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 17 Feb 2010 07:44:14 GMT</pubDate></item><item><title><![CDATA[Reply to mehrere Elemente eines Arrays gleichzeitig kopieren on Wed, 17 Feb 2010 15:25:13 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Bei größeren Datenmengen müsste der Speicherzugriff der Flaschenhals sein (Latenz und Bandbreite). Der Speicher ist im Verhältnis zu heutigen CPUs sehr langsam.</p>
</blockquote>
<p>Naja, ne.<br />
Ein i7 System kann bei linearem Zugriff so an die 20 GB pro Sekunde aus/in dem Hauptspeicher schaufeln. Das sind dann ca. 6 Byte pro Zyklus.<br />
Mit ner einfachen Kopierschleife die Bytes schaufelt kommt man nichtmal in die Nähe von 20 GB/sec.<br />
Es zahlt sich also schon immer noch aus hier etwas &quot;schlauer&quot; zu kopieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1857135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1857135</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 17 Feb 2010 15:25:13 GMT</pubDate></item><item><title><![CDATA[Reply to mehrere Elemente eines Arrays gleichzeitig kopieren on Wed, 17 Feb 2010 16:11:06 GMT]]></title><description><![CDATA[<blockquote>
<p>Mit den MMX/SSE Registern geht das soweit ich weiss noch einiges mehr.</p>
</blockquote>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-257842-and-highlight-is-.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-257842-and-highlight-is-.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1857176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1857176</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 17 Feb 2010 16:11:06 GMT</pubDate></item><item><title><![CDATA[Reply to mehrere Elemente eines Arrays gleichzeitig kopieren on Wed, 17 Feb 2010 20:49:13 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Mit den MMX/SSE Registern geht das soweit ich weiss noch einiges mehr.</p>
</blockquote>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-257842-and-highlight-is-.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-257842-and-highlight-is-.html</a></p>
</blockquote>
<p>Und was sagt uns dieser Thread? Sind IMO nicht wirklich brauchbare Informationen drin.</p>
<p>Ich *weiss* dass es deutlich schnellere Implementierungen als &quot;rep movs&quot; gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1857321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1857321</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 17 Feb 2010 20:49:13 GMT</pubDate></item></channel></rss>