<?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[Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot;]]></title><description><![CDATA[<p>Hallo,<br />
ich würde gerne einmal ausprobieren, polymorphe Objekte im Speicher zusammenzumoven, von denen ich erst zur Laufzeit und nach der Konstruktion erfahre, in welcher Beziehung sie zueinander stehen, zwecks Überprüfung ob Cache-Freundlichkeit in meinem Use-Case was bringt und weil ich das überhaupt mal technisch interessant finde. Kennt jemand von euch eine Bibliothek, die das in irgendeiner Weise unterstützt, sodass ich mich um das ganze nötige Alignment und diese Details nicht zu kümmern brauche?</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320288/polymorphe-objekte-im-speicher-quot-zusammenmoven-quot</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 04:50:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320288.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Sep 2013 08:27:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 08:27:21 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich würde gerne einmal ausprobieren, polymorphe Objekte im Speicher zusammenzumoven, von denen ich erst zur Laufzeit und nach der Konstruktion erfahre, in welcher Beziehung sie zueinander stehen, zwecks Überprüfung ob Cache-Freundlichkeit in meinem Use-Case was bringt und weil ich das überhaupt mal technisch interessant finde. Kennt jemand von euch eine Bibliothek, die das in irgendeiner Weise unterstützt, sodass ich mich um das ganze nötige Alignment und diese Details nicht zu kümmern brauche?</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2354802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354802</guid><dc:creator><![CDATA[Polymorphius]]></dc:creator><pubDate>Mon, 23 Sep 2013 08:27:21 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 08:39:05 GMT]]></title><description><![CDATA[<p>Polymorphius schrieb:</p>
<blockquote>
<p>Hallo,<br />
ich würde gerne einmal ausprobieren, polymorphe Objekte im Speicher zusammenzumoven</p>
</blockquote>
<p>Häh? Was willst Du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2354805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354805</guid><dc:creator><![CDATA[qweasdyxc]]></dc:creator><pubDate>Mon, 23 Sep 2013 08:39:05 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 09:05:20 GMT]]></title><description><![CDATA[<p>Ich denke, er will 2 Objekte, die in einer bestimmten Relation zueinander stehen, physisch annähern lassen, sprich im Speicher nebeneinander stehen haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2354810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354810</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 23 Sep 2013 09:05:20 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 09:25:38 GMT]]></title><description><![CDATA[<p>Du alloziierst einmal Speicher und erzeugst darin Elemente mit dem Movekonstruktor. Dann kannst du normal per Referenz oder Pointer zugreifen.<br />
Du kannst aber nicht einfach Elemente löschen und neue erzeugen, schließlich sind sie unterschiedlich groß, ich gehe aber davon aus, dass bei einer solchen Optimierungsmaßnahme nur einmal Speicher belegt und bis zum Ende genutzt werden soll.</p>
<p>Ich denke aber, dass sich das nur in extremen Fällen wirklich lohnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2354814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354814</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Mon, 23 Sep 2013 09:25:38 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 10:11:53 GMT]]></title><description><![CDATA[<p>@Polymorphius<br />
In C++ kannst du keine Objekte im Speicher verschieben. Du höchstens ne Kopie erstellen und dann das Original zerstören.</p>
<p>Wenn du allerdings Zeiger auf so ein Objekt hast, dann musst du die alle - von Hand - updaten. Bzw. wenn du Referenzen hast ist es ganz doof, da man die ja nicht auf ein anderes Objekt &quot;verbiegen&quot; kann.<br />
Um dieses &quot;Detail&quot; wirst du dich auf jeden Fall selbst kümmern müssen. Da ist dein Vorhaben viel zu speziell als dass es dafür 'was fertiges geben würde.</p>
<p>Und dann bräuchtest du nen Allokator der den Speicher &quot;linear&quot; vergibt. Könnte sein dass Boost da was passendes hat.</p>
<p>Oder natürlich du packst die Objekte zusammen in ne struct, dann liegen die auch hintereinander. Falls das bei deiner Applikation möglich ist.</p>
<p>Klingt aber alles in allem nach recht viel Aufwand.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2354828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354828</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 23 Sep 2013 10:11:53 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 10:22:03 GMT]]></title><description><![CDATA[<p><code>placement-new</code> mit eigener Speicherverwaltung könnte da helfen. Wahrscheinlich aber auch nur für PODs.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2354833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354833</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 23 Sep 2013 10:22:03 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 10:42:53 GMT]]></title><description><![CDATA[<p>DocShoe schrieb:</p>
<blockquote>
<p><code>placement-new</code> mit eigener Speicherverwaltung könnte da helfen. Wahrscheinlich aber auch nur für PODs.</p>
</blockquote>
<p>Ja, man kann <code>placement new</code> verwenden um ein Objekt in einem &quot;selbst besorgten&quot; Speicherbereich zu konstruieren.<br />
Ob POD oder nicht ist dabei völlig egal, das geht mit beliebigen Objekten. Was meinst du was <code>std::vector</code> &amp; Co machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2354836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354836</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 23 Sep 2013 10:42:53 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 10:49:37 GMT]]></title><description><![CDATA[<p>Hallo, danke für eure Antworten!<br />
Also ja, das meine ich, ein Speicherpool, den ich zur Laufzeit entsprechend der Anzahl und Größe der Objekte anlege und dann Placement-New-Move dorthin benutze, um die Objekte zusammenzurücken und in eine bestimmte Reihenfolge zu bringen. Irgendwie sagen die Objekte über abstrakte Methoden ihre Größe an und eventuell das Alignment (wobei das gar nicht nötig ist, da das Alignment sich ja nach dem vtable-ptr richtet und somit für alle gleich ist, oder?) und haben eine Methode ala &quot;MoveYourselfTo(void*)&quot;. Und jetzt habe ich mich gefragt, ob es da irgendwie eben eine fertige Ausarbeitung von soetwas gibt. Schließlich muss man ja auch eine Placement-Deleter-Liste pflegen usw. also das ist nicht total unaufwändig.</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2354841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354841</guid><dc:creator><![CDATA[Polymorphius]]></dc:creator><pubDate>Mon, 23 Sep 2013 10:49:37 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 11:10:19 GMT]]></title><description><![CDATA[<p>Polymorphius schrieb:</p>
<blockquote>
<p>Schließlich muss man ja auch eine Placement-Deleter-Liste</p>
</blockquote>
<p>Du kannst auch smart pointer zurückgeben, die in ihrer deleter-Funktion den Konstruktor direkt aufrufen und es von der Liste löschen. Dann ist zwischen den anderen Objekten eine Lücke und du musst dir diese Lücke auch irgendwie merken, den Speicher auch wieder effizient füllen, etc.<br />
Auf längere Sicht wird auch hier Speicherfragmentierung, ungenutzte Lücken etc.. auftreten.<br />
Praktisch ist es wohl nur dann, wenn am Anfang das Programm initialisiert und die Objekte quasi als High-speed-Datenbank angelegt werden, danach mit Hilfe dieser Objekte ein Datensatz bearbeitet wird und die Objekte danach alle wieder freigegeben werden, z.B. weil das Programm beendet werden soll.</p>
<p>Polymorphius schrieb:</p>
<blockquote>
<p>das ist nicht total unaufwändig.</p>
</blockquote>
<p>Der Aufwand lohnt sich nur dann, wenn du eine extreme Geschwindigkeit brauchst und es keine anderen Optimierungsmöglichkeiten mehr gibt. Für ein normales Programm ist das viel zu aufwändig, da muss es schon einen besonderen Grund für geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2354843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354843</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Mon, 23 Sep 2013 11:10:19 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 11:23:31 GMT]]></title><description><![CDATA[<p>Nun, ich habe hier wirklich die Situation, dass die gesamte Liste an Objekten plus ihrer Zustands-Strukturen etc. zwar alle dynamisch erstellt werden, ihre Relationen zunächst unbekannt sind etc, aber dann nach einer &quot;Bindundsphase&quot; ein festes &quot;Netzwerk&quot; an Objekten entsteht, das im Rahmen der Ausführung statisch ist. Das heißt also, ich hätte genau einmal am Anfang den Aufwand des &quot;zusammenmovens&quot;, danach verändert sich nichts mehr.<br />
Das ganze geschähe im Rahmen eines Systems, das auch schon Event-Abhängige Zustände und deren Thread-Absicherung für die Objekte verwaltet, den ganzen Kram könnte ich also auch entsprechend mit in den Pool geben.<br />
Ich mache mir nur &quot;zum Spaß&quot; Gedanken darüber gerade, vielleicht sollte ich gerade deshalb auch überhaupt gar nicht fragen, ob's dafür schon Bibliotheken gibt. Aber bevor ich totalen Mist fabriziere (wovon auszugehen ist), dachte ich, ich schaue mal an, was jemand anderes diesbezüglich schon gemacht hat.<br />
Ich schätze das wird mein neues Wochenendprojekt, eines von denen, die in absehbarer Zeit in der Versenkung landen! <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/2354846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354846</guid><dc:creator><![CDATA[Polymorphius]]></dc:creator><pubDate>Mon, 23 Sep 2013 11:23:31 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 14:25:36 GMT]]></title><description><![CDATA[<p>Polymorphius schrieb:</p>
<blockquote>
<p>und haben eine Methode ala &quot;MoveYourselfTo(void*)&quot;</p>
</blockquote>
<p>Mach lieber eine <code>shared_ptr&lt;Base&gt; CloneMove(MyAllocator* a)</code> Methode.<br />
<code>MyAllocator</code> kann dann z.B. ne Template-Funktion haben die den Speicher besorgt, dann das passende Placement-New mit den übergebenen Parametern aufruft, und zum Schluss nen <code>shared_ptr</code> mit nem passenden Deleter zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2354915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354915</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 23 Sep 2013 14:25:36 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 14:39:06 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>DocShoe schrieb:</p>
<blockquote>
<p><code>placement-new</code> mit eigener Speicherverwaltung könnte da helfen. Wahrscheinlich aber auch nur für PODs.</p>
</blockquote>
<p>Ja, man kann <code>placement new</code> verwenden um ein Objekt in einem &quot;selbst besorgten&quot; Speicherbereich zu konstruieren.<br />
Ob POD oder nicht ist dabei völlig egal, das geht mit beliebigen Objekten. Was meinst du was <code>std::vector</code> &amp; Co machen?</p>
</blockquote>
<p>Und wenn du einige <code>std::strings</code> oder <code>std::vector</code> oder sonstwelche Objekte mit eigenem intern verwalteten Speicher hast brauchst du auch nix mehr zusammenschieben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2354922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354922</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 23 Sep 2013 14:39:06 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphe Objekte im Speicher &amp;quot;zusammenmoven&amp;quot; on Mon, 23 Sep 2013 14:44:23 GMT]]></title><description><![CDATA[<p>Und wenn der Hund nicht geschissen hätte, hätt' er den Hasen gekriegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2354923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2354923</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 23 Sep 2013 14:44:23 GMT</pubDate></item></channel></rss>