<?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[unmengen von member permutationen]]></title><description><![CDATA[<p>hi,</p>
<p>ich moechte hier ein wenig den speicherverbrauch optimieren, so hab ich hier zZ gesehen, dass es in vielen klassen unmengen von membern gibt, die eventuell mal genutzt werden, 90% ist aber wasted.</p>
<p>nun koennte ich natuerlich pro member die &gt;sizeof(pointer) ist einen pointer anlegen und beim ersten zugriff allokieren, aber das allokieren verursacht sicherlich viel speicherfragmentierung und ich hab pro member nen pointer, was auch ein wenig unnutz ist.</p>
<p>nun dachte ich, ich koennte mir einen pointer merken pro class und einen 1byte-index pro member, aber das ist ein wenig rumgehacke wie ich finde, deswegen wollte ich mal fragen ob ihr hier bessere vorschlaege habt bzw ein paar pattern die weiterhelfen wuerden.</p>
<p>als beispiel:</p>
<pre><code class="language-cpp">class CMensch
{
CSchangerschaftsstatus m_...;
CVasektomie m_...
CWagen m_...;
CAllergie m_...;
CFoo m_...;
}
</code></pre>
<p>und nein, mit simpler vererbung ist das nicht so einfach zu loesen, da es unmengen von memberpermutationen gebe, esseiden hier kann jemand mit ner art template oder sowas dienen dass das vollbringt.</p>
<p>thx.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/164340/unmengen-von-member-permutationen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 21:44:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/164340.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Nov 2006 12:08:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to unmengen von member permutationen on Tue, 07 Nov 2006 12:08:39 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>ich moechte hier ein wenig den speicherverbrauch optimieren, so hab ich hier zZ gesehen, dass es in vielen klassen unmengen von membern gibt, die eventuell mal genutzt werden, 90% ist aber wasted.</p>
<p>nun koennte ich natuerlich pro member die &gt;sizeof(pointer) ist einen pointer anlegen und beim ersten zugriff allokieren, aber das allokieren verursacht sicherlich viel speicherfragmentierung und ich hab pro member nen pointer, was auch ein wenig unnutz ist.</p>
<p>nun dachte ich, ich koennte mir einen pointer merken pro class und einen 1byte-index pro member, aber das ist ein wenig rumgehacke wie ich finde, deswegen wollte ich mal fragen ob ihr hier bessere vorschlaege habt bzw ein paar pattern die weiterhelfen wuerden.</p>
<p>als beispiel:</p>
<pre><code class="language-cpp">class CMensch
{
CSchangerschaftsstatus m_...;
CVasektomie m_...
CWagen m_...;
CAllergie m_...;
CFoo m_...;
}
</code></pre>
<p>und nein, mit simpler vererbung ist das nicht so einfach zu loesen, da es unmengen von memberpermutationen gebe, esseiden hier kann jemand mit ner art template oder sowas dienen dass das vollbringt.</p>
<p>thx.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170388</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Tue, 07 Nov 2006 12:08:39 GMT</pubDate></item><item><title><![CDATA[Reply to unmengen von member permutationen on Tue, 07 Nov 2006 12:40:34 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::map&lt;std::string, ValueBase&gt;
</code></pre>
<p>Oder vielleicht gleich Relational?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170408</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 07 Nov 2006 12:40:34 GMT</pubDate></item><item><title><![CDATA[Reply to unmengen von member permutationen on Tue, 07 Nov 2006 13:01:06 GMT]]></title><description><![CDATA[<p>hab ich vergessen zu sagen dass diese optimierung nicht extrem die performance zerhauen darf? <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/1170430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170430</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Tue, 07 Nov 2006 13:01:06 GMT</pubDate></item><item><title><![CDATA[Reply to unmengen von member permutationen on Tue, 07 Nov 2006 13:18:33 GMT]]></title><description><![CDATA[<p>na schmeiss die member halt alle wech und ersetz sie durch ne get(enum/string/whatever), die die daten erst bei bedarf aus der datenbank gräbt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170450</guid><dc:creator><![CDATA[ganz einfach]]></dc:creator><pubDate>Tue, 07 Nov 2006 13:18:33 GMT</pubDate></item><item><title><![CDATA[Reply to unmengen von member permutationen on Tue, 07 Nov 2006 13:25:45 GMT]]></title><description><![CDATA[<p>oder ich lad sie von der diskette... klar... kommt schon, lasst die spass antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170458</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Tue, 07 Nov 2006 13:25:45 GMT</pubDate></item><item><title><![CDATA[Reply to unmengen von member permutationen on Tue, 07 Nov 2006 13:43:17 GMT]]></title><description><![CDATA[<p>wieso spass? wozu haben die dinger überhaupt soviele membervariablen? sieht mir eher nach unnötig aufgeblähtem konzept für ne patientientenkartei aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170470</guid><dc:creator><![CDATA[versteht kein spass]]></dc:creator><pubDate>Tue, 07 Nov 2006 13:43:17 GMT</pubDate></item><item><title><![CDATA[Reply to unmengen von member permutationen on Tue, 07 Nov 2006 14:34:12 GMT]]></title><description><![CDATA[<p>ich hoffe du verstehst das wort 'beispiel'.</p>
<p>es gibt soviele member weil so ein objekt je nachdem wie es initialisiert wird (im bsp als frau/mann) dann andere eigenschaften hat, es gibt dabei unmengen von permutationen (sodass ich nicht fuer jede moeglichkeit ein dediziertes objekt schreiben kann).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170502</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Tue, 07 Nov 2006 14:34:12 GMT</pubDate></item><item><title><![CDATA[Reply to unmengen von member permutationen on Tue, 07 Nov 2006 14:37:38 GMT]]></title><description><![CDATA[<p>Müssen die dynamisch änderbar sein (also kommen noch neue Member dazu, weil weitere Teile des Objektes angelegt werden? Mit templates kann man sowas schon generieren, allerdings müßte der Typ dann zur Compilezeit feststehen.</p>
<p>Was ist wenn Du nicht auf std::map&lt;string,...&gt; sondern auf std::map&lt;int, ...&gt; mit entsprechend definierten Konstanten gehst? Oder gar ne hash_map, da haste O(1) look-up-Zeiten und bist voll dynamisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170503</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Tue, 07 Nov 2006 14:37:38 GMT</pubDate></item><item><title><![CDATA[Reply to unmengen von member permutationen on Tue, 07 Nov 2006 16:54:27 GMT]]></title><description><![CDATA[<p>wenn man solche permutationen hat, ist dasn ganze evtl mit der falschen relationsrichtung entwickelt worden, oder die bezogenen objekte wurden direkt integriert</p>
<p>evtl ist es sinnvoll auf ein anderer relationsmodell zu refactoren, um die datenmenge je klasse zu verringern und dafür mehr relationsinformationen gesondert zu speichern</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170601</guid><dc:creator><![CDATA[ronny]]></dc:creator><pubDate>Tue, 07 Nov 2006 16:54:27 GMT</pubDate></item><item><title><![CDATA[Reply to unmengen von member permutationen on Tue, 07 Nov 2006 17:54:57 GMT]]></title><description><![CDATA[<p>Also ne Hash-Map mit pre-hashed Strings als Keys z.B. ist recht flott. Wenn die &quot;Namen&quot; gleich Integer Konstanten sind sogar noch ein kleines Stückchen schneller. SQLite mit memory DBs ist z.B. auch nicht langsam, wobei natürlich LANGE nicht so schnell wie ein direkter Zugriff auf ne Variable.</p>
<p>Die &quot;Patterns&quot; die hier weiterhelfen sind eben assoziative Container bzw. relationale Strukturen. Beides keine Ferraris, aber was anderes kenne ich nicht was sich so breit und allgemein anwenden liesse wie du die Frage formuliert hast. Optimierte Lösungen sind fast immer spezialisierte Lösungen.</p>
<p>Sach also einfach mal worums genau geht, vielleicht können wir uns dann besser was vorstellen und dir dann besser helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170654</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 07 Nov 2006 17:54:57 GMT</pubDate></item><item><title><![CDATA[Reply to unmengen von member permutationen on Tue, 07 Nov 2006 19:38:57 GMT]]></title><description><![CDATA[<p>Ich würde auch zur template-Generierung plädieren. Schau dir mal die hierarchy-generators aus der loki-lib an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1170715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170715</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Tue, 07 Nov 2006 19:38:57 GMT</pubDate></item><item><title><![CDATA[Reply to unmengen von member permutationen on Wed, 08 Nov 2006 07:26:36 GMT]]></title><description><![CDATA[<p>danke erstmal <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>wie ich schon sagte, geht es um klassen, die so einiges an membern haben, aber meistens werden nur wenige davon wirklich benutzt.</p>
<p>quasi ne klasse CWagen, die sowohl ne spoiler, tieferlegung, breitreifen, alufelgen usw. member hat, wobei nicht alle diese member in jedem wagen benutzt werden, sondern nur einige wenige z.b. braucht ein</p>
<pre><code class="language-cpp">CWagen Combi;
</code></pre>
<p>sicherlich keine spoiler-daten</p>
<p>die klassen die so aufgeblaeht werden tausende male instanziert, ich denke man koennte also ENORM viel speicher sparen.</p>
<p>assoziative container haben aus meiner sicht irgendwie keinen vorteil gegenueber pointern die bei bedarf auf allokierte daten zeigen (da waeren sogar ne art autoptr die beim erstzugriff automatisch new aufrufen sehr praktisch typesafe und c++ style <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="🙂"
    /> ).<br />
was mich daran stoert ist der overhead (duerfte bei assoziativen containern eventuell noch groesser sein), da die daten manchmal nur z.b. 16byte haben und pro member dann auch ein new (overhead beim verwalten der daten bei nem new auf 16byte is auch nicht ohne).</p>
<p>was ich zZ so als idee haette, waere ein ptr auf ein byte array in dem nur die benutzten member aneinandergereiht liegen. ob ein member im array ist, kann man sehr simpel und schnell mit einer bitmask checken, falls nicht, dann liefert die klasse den defaultwert zurueck fuer die member. bei der ersten zuweisung zu einem member, mueste das array um dieses eine member erweitert werden.</p>
<p>probleme die bisher ungeloest sind:<br />
-wie generiert man am smartesten alle moeglichen indizierungen fuer die bitmask fuer alle member ohne sich den wolf zu coden? (soll ja generisch sein, da das problem hier zuhauf auftritt)<br />
-da die member verschiedene datentypen haben und verschieden gross sind, wie indiziert man auf diese verschiedenen groessen und wie sorgt man dafuer das alles typesafe ist?</p>
<p>werd mir jetzt die hierarchy-generators mal ansehen <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/1170878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1170878</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Wed, 08 Nov 2006 07:26:36 GMT</pubDate></item></channel></rss>