<?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[make_pair - Speicherfresser?]]></title><description><![CDATA[<p>Nachfolgend sind die Dateigrößen eines Dummyprogramms zu sehen</p>
<blockquote>
<p><strong>$ ls -lah</strong><br />
16 -rwxr-xr-x 1 uwe uwe <strong>13772</strong> 9. Apr 05:08 dummy</p>
<p>...</p>
<p><strong>$ ls -lah</strong><br />
16 -rwxr-xr-x 1 uwe uwe <strong>22050</strong> 9. Apr 05:08 dummy</p>
</blockquote>
<p>Bei ersterem ist</p>
<pre><code class="language-cpp">// Diese Deklaration ist in beiden Versionen vorhanden, kann daher als Auslöser ausgeschlossen werden
  // std::vector&lt;std::pair&lt;char, std::string&gt; &gt; args;

  // ------
  args.push_back(std::make_pair('m', &quot;moo&quot;));
  // ------
</code></pre>
<p>ausgeklammert, ansonsten sind beide Programme völlig identisch.</p>
<p>Wie kommt es also, dass sich die Programmdatei ob der Verwendung von <em>make_pair</em> um mehr als 8KB (was immerhin mehr als 50% der ursprünglichen Größe entspricht - also nicht unbeachtlich) &quot;aufbläht&quot;?</p>
<p>Ratsuchende Grüße,<br />
Uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178208/make_pair-speicherfresser</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 18:19:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178208.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Apr 2007 03:12:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to make_pair - Speicherfresser? on Mon, 09 Apr 2007 03:12:11 GMT]]></title><description><![CDATA[<p>Nachfolgend sind die Dateigrößen eines Dummyprogramms zu sehen</p>
<blockquote>
<p><strong>$ ls -lah</strong><br />
16 -rwxr-xr-x 1 uwe uwe <strong>13772</strong> 9. Apr 05:08 dummy</p>
<p>...</p>
<p><strong>$ ls -lah</strong><br />
16 -rwxr-xr-x 1 uwe uwe <strong>22050</strong> 9. Apr 05:08 dummy</p>
</blockquote>
<p>Bei ersterem ist</p>
<pre><code class="language-cpp">// Diese Deklaration ist in beiden Versionen vorhanden, kann daher als Auslöser ausgeschlossen werden
  // std::vector&lt;std::pair&lt;char, std::string&gt; &gt; args;

  // ------
  args.push_back(std::make_pair('m', &quot;moo&quot;));
  // ------
</code></pre>
<p>ausgeklammert, ansonsten sind beide Programme völlig identisch.</p>
<p>Wie kommt es also, dass sich die Programmdatei ob der Verwendung von <em>make_pair</em> um mehr als 8KB (was immerhin mehr als 50% der ursprünglichen Größe entspricht - also nicht unbeachtlich) &quot;aufbläht&quot;?</p>
<p>Ratsuchende Grüße,<br />
Uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262047</guid><dc:creator><![CDATA[uwe_guest]]></dc:creator><pubDate>Mon, 09 Apr 2007 03:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to make_pair - Speicherfresser? on Mon, 09 Apr 2007 03:21:54 GMT]]></title><description><![CDATA[<p>Was ich vergaß zu erwähnen:</p>
<pre><code>gcc-Version 4.1.2 (Gentoo 4.1.2)
</code></pre>
<p>Auch std::pair generell - also ohne der Verwendung von make_pair - führt zu dem signifikant höheren Speicherbedarf.</p>
<pre><code class="language-cpp">std::pair&lt;char,std::string&gt; moo;
  args.push_back(moo);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1262048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262048</guid><dc:creator><![CDATA[uwe_guest]]></dc:creator><pubDate>Mon, 09 Apr 2007 03:21:54 GMT</pubDate></item><item><title><![CDATA[Reply to make_pair - Speicherfresser? on Mon, 09 Apr 2007 03:25:19 GMT]]></title><description><![CDATA[<p>args.push_back(std::make_pair('m', &quot;moo&quot;));<br />
args ist map&lt;char,string&gt;?<br />
ja, vielleicht, weil &quot;moo&quot; erstmal nen konstruktor von string aufruft. der wiederum ruft strlen, und strcpy und die operator new auf. die wiederum kann ne exception schmeißen, weshalb das exception-handling reincompiliert wird. die exceptions haben virtuelle funktionen, weshalb vtbls dazukommen. vielleicht noch die pseudofunktion für pure-virtual-function-calls. für den ganzen mist sind 8k ganz schön wenig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262049</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 09 Apr 2007 03:25:19 GMT</pubDate></item><item><title><![CDATA[Reply to make_pair - Speicherfresser? on Mon, 09 Apr 2007 03:29:42 GMT]]></title><description><![CDATA[<p>könntest du mal testen, was make_pair kostet, wenn es um ein pair&lt;int,int&gt; geht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262050</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 09 Apr 2007 03:29:42 GMT</pubDate></item><item><title><![CDATA[Reply to make_pair - Speicherfresser? on Mon, 09 Apr 2007 03:46:59 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>könntest du mal testen, was make_pair kostet, wenn es um ein pair&lt;int,int&gt; geht?</p>
</blockquote>
<p>Ebenfalls ~22K.<br />
An den std::string Routinen kann es nicht liegen, die werden auch andersweitig im Programm verwendet.</p>
<p>Ich merke aber gerade, dass das Verhalten auf std::vector.push_back zurückzuführen ist - ich sollte im Dämmerzustand keine Vermutungen über vermeintliche Fehlverhalten anstellen ohne den Fehler vorher <em>exakt</em> eingegrenzt zu haben. Werde mich morgen mit den anderen &quot;Array-Klassen&quot; ala list und dequeue befassen, vielleicht sind diese in der Benutzung, bzw Speichernutzung angenehmer als vector - wobei das im Prinzip auch nicht wirklich einen riesigen Unterschied darstellen wird.</p>
<p>Das Thema kann bei Bedarf 'gen Dustbin verschoben werden...</p>
<p>Grüße und Danke,<br />
Uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262051</guid><dc:creator><![CDATA[uwe_guest]]></dc:creator><pubDate>Mon, 09 Apr 2007 03:46:59 GMT</pubDate></item><item><title><![CDATA[Reply to make_pair - Speicherfresser? on Mon, 09 Apr 2007 18:49:36 GMT]]></title><description><![CDATA[<p>uwe_guest schrieb:</p>
<blockquote>
<p>Werde mich morgen mit den anderen &quot;Array-Klassen&quot; ala list und dequeue befassen, vielleicht sind diese in der Benutzung, bzw Speichernutzung angenehmer als vector - wobei das im Prinzip auch nicht wirklich einen riesigen Unterschied darstellen wird.</p>
</blockquote>
<p>Lass das. Du wählst einen Container danach aus, was du zur Laufzeit für Anforderungen an ihn stellst (schnelles Einfügen/Löschen, Random-Access-Iteratoren etc.), nicht danach, wieviel Code der Compiler generiert. Hast du übrigens mal versucht, die Binärdatei zu &quot;strip&quot;pen?! std::vector hat einige Methoden, die mit dem push_back aufgerufen werden könnten und deren Code, Namen (und vielleicht noch andere Informationen bis hin zum gesamten Programmtext je nach -g-Einstellung) in die Datei, die der Compiler ausspuckt reinkommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262492</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 09 Apr 2007 18:49:36 GMT</pubDate></item><item><title><![CDATA[Reply to make_pair - Speicherfresser? on Tue, 10 Apr 2007 03:31:21 GMT]]></title><description><![CDATA[<blockquote>
<p>Lass das. Du wählst einen Container danach aus, was du zur Laufzeit für Anforderungen an ihn stellst (schnelles Einfügen/Löschen, Random-Access-Iteratoren etc.), nicht danach, wieviel Code der Compiler generiert.</p>
</blockquote>
<p>Schon klar. <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="🙂"
    /> Da ich mich aber bisher nicht wirklich mit den Containerformaten beschäftigt habe, ist das mit &quot;Benutzung&quot; gemeint gewesen - die Speichernutzung ist nur ein Effekt, der mit am Rande aufgefallen ist, bei den heutigen Datenmengen aber größtenteils vernachlässigbar ist - auch wenn Optimierung natürlich auch seine Vorzüge hat.</p>
<blockquote>
<p>Hast du übrigens mal versucht, die Binärdatei zu &quot;strip&quot;pen?! std::vector hat einige Methoden, die mit dem push_back aufgerufen werden könnten und deren Code, Namen (und vielleicht noch andere Informationen bis hin zum gesamten Programmtext je nach -g-Einstellung) in die Datei, die der Compiler ausspuckt reinkommen.</p>
</blockquote>
<p>Jupp, ges'trip't isses wieder bei ~19K. MIt den entsprechenden Compilerflags habe ich mich ehrlich gesagt ebenfalls noch nie eingehend beschäftigt. Solange das Programm die gewünschten Funktionen erfüllte, war mir das bis dato immer egal gewesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1262619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1262619</guid><dc:creator><![CDATA[uwe_guest]]></dc:creator><pubDate>Tue, 10 Apr 2007 03:31:21 GMT</pubDate></item></channel></rss>