<?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[Custom Allocator fuer std::vector]]></title><description><![CDATA[<p>Hallo,</p>
<p>in meinem Program benutze ich nur std::vectoren mit einfachen Datentypen wie folgt:</p>
<pre><code>std::vector&lt;unsigned int&gt;vec(COUNT);
</code></pre>
<p>Die Vectoren koennen sehr gross werden. Dann dauert das allokieren manchmal sehr lange. Jetzt habe ich mir ueberlegt einen Custom Allocator zu schreiben, der mir immer 8 Byte speicher reserviert also einen 64 Bit Datentyp benutzt. Das muesste die Anzahl von Aufrufen von &quot;new&quot; ja halbieren und die Sache schneller machen.</p>
<pre><code>std::vector&lt;unsigned int,MyAlloc&lt;unsigned long long&gt;&gt; v(COUNT);
</code></pre>
<p>Ist das sinnvoll oder hat es keinen Vorteil? Oder geht das ueberhaupt nicht?</p>
<p><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/topic/323161/custom-allocator-fuer-std-vector</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 09:14:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/323161.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Jan 2014 05:39:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 05:39:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>in meinem Program benutze ich nur std::vectoren mit einfachen Datentypen wie folgt:</p>
<pre><code>std::vector&lt;unsigned int&gt;vec(COUNT);
</code></pre>
<p>Die Vectoren koennen sehr gross werden. Dann dauert das allokieren manchmal sehr lange. Jetzt habe ich mir ueberlegt einen Custom Allocator zu schreiben, der mir immer 8 Byte speicher reserviert also einen 64 Bit Datentyp benutzt. Das muesste die Anzahl von Aufrufen von &quot;new&quot; ja halbieren und die Sache schneller machen.</p>
<pre><code>std::vector&lt;unsigned int,MyAlloc&lt;unsigned long long&gt;&gt; v(COUNT);
</code></pre>
<p>Ist das sinnvoll oder hat es keinen Vorteil? Oder geht das ueberhaupt nicht?</p>
<p><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/2378433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378433</guid><dc:creator><![CDATA[ChefDerDeutschenBank]]></dc:creator><pubDate>Mon, 20 Jan 2014 05:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 06:22:58 GMT]]></title><description><![CDATA[<p>Ehm, wenige große vectoren = wenige Allokationen, also das wird dann wohl eher nicht dein Problem sein. Der allokiert doch nicht jedes byte einzeln, lol.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378436</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 20 Jan 2014 06:22:58 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 07:40:31 GMT]]></title><description><![CDATA[<p>ChefDerDeutschenBank schrieb:</p>
<blockquote>
<p>Dann dauert das allokieren manchmal sehr lange.</p>
</blockquote>
<p>Woher weisst du das?<br />
Was heisst sehr lange?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378443</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 20 Jan 2014 07:40:31 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 07:48:24 GMT]]></title><description><![CDATA[<p>ChefDerDeutschenBank schrieb:</p>
<blockquote>
<p>Die Vectoren koennen sehr gross werden. Dann dauert das allokieren manchmal sehr lange.</p>
</blockquote>
<p>Momentchen, was heißt &quot;lange&quot;?</p>
<p>Also zunächst mal muss klar sein, daß der vector geometrisch wächst, mithin die Allokationsaufrufe logarithmisch und sogar die Kopierungen nur amortisiert linear sind. Also er wächst zum Beispiel immer die Größe verdoppelnd.<br />
1 2 4 8 16 32…1024576<br />
Dabei macht er NUR 20 Verdopplungen!<br />
Kopierungen:<br />
1+2+4+8+16+32+524288 = 1024575, genau eins weniger als die nächste Zweierpotenz.</p>
<p>Der vector ist für Dich perfekt. Als ChefDerDeutschenBank nehme ich an, es geht Dir darum, auf Großrechnern die Kundenwertpapierdepots durcheinanderzuwirbeln. Da ist vector perfekt, so, wie er ist.</p>
<p>ChefDerDeutschenBank schrieb:</p>
<blockquote>
<p>manchmal sehr lange.</p>
</blockquote>
<p>Oder ist das &quot;Ruckeln&quot; gemeint? Klar, wenn er von 1073741824 auf 2147483648 wächst, dann steht die Anwendung für ein Sekündchen. Allein das liegt am Kopieren und hat nüscht mit dem Allokator zu thun. Kannst Dir einen kopierarmen vector basteln mit VirtualAlloc/mmap und einfach mal 16G Adressraum reservieren, ihn bei Bedarf aber erst dem Ram zuordnen.</p>
<p>ChefDerDeutschenBank schrieb:</p>
<blockquote>
<p>Jetzt habe ich mir ueberlegt einen Custom Allocator zu schreiben, der mir immer 8 Byte speicher reserviert also einen 64 Bit Datentyp benutzt. Das muesste die Anzahl von Aufrufen von &quot;new&quot; ja halbieren und die Sache schneller machen.</p>
</blockquote>
<p>Nein, vector thäte bei 2^30 ints nur 30-mal new machen, Deine Annahme des vectors aber mehr als tausend mal tausend mal.</p>
<p>Will man das Ruckeln auch weghaben, was Dich als ChefDerDeutschenBank w*****einlich nicht betrifft, kann man auch verkettete Listen nehmen. Pro neuem Objekt ein new. Sagen wir mal 50 Takte pro new, schnell 50-mal so lahm wie der vector. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Und das kann man beheben, indem man lauter kleiune Mini-vectoren, von sagen wir mal 8k Größe als Liste verkettet (oder in einem Master-Array/Baum/egal), macht dann pro 2000 ints nur einmal new UND ruckelt nicht. Ist aber wieder über die gesamte Laufzeit ein wenig lahmer als vector. So ein Container ist auch eingebaut, er heißt std::deque.</p>
<p>Du brauchst keinen custom allocator.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378444</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 20 Jan 2014 07:48:24 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 08:32:25 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>w*****einlich</p>
</blockquote>
<p>wahrscheinlich<br />
warscheinlich<br />
arsch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378450</guid><dc:creator><![CDATA[stochastiker]]></dc:creator><pubDate>Mon, 20 Jan 2014 08:32:25 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 08:57:45 GMT]]></title><description><![CDATA[<p>Wenn ich einen Vector erstelle weiss ich immer schon genau wie viele Elemente drin sein werden. Die Groesse veraendert sich auch bis zum Programmende nicht. Es wird also kein push_back (und es werden keine Elemente geloescht). Die Daten kommen aus einer Datei, und die groesse weiss ich wenn ich die Datei lese.</p>
<pre><code>std::vector&lt;unsigned int&gt;vec(COUNT);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2378455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378455</guid><dc:creator><![CDATA[ChefDerDeutschenBank]]></dc:creator><pubDate>Mon, 20 Jan 2014 08:57:45 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 09:02:35 GMT]]></title><description><![CDATA[<p>Wie gross ist der benoetigte Speicher und was bedeutet lang (in Sekunden bitte)? Mit welcher Frequenz benoetigst du diesen Speicher? Wie gross ist COUNT?</p>
<blockquote>
<p>Die Daten kommen aus einer Datei</p>
</blockquote>
<p>Kann es sein, dass das Lesen der Datei lange dauert nicht die Speicherallokation? Wie misst du die Zeit? Was misst du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378457</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 20 Jan 2014 09:02:35 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 10:04:49 GMT]]></title><description><![CDATA[<p>Ok, kann noch ein Problemchen geben. Dein vector ist viel größer als das RAM und liegt zu großen Teilen in der Auslagerungsdatei. Ist das so? Dann ist:</p>
<p>Da haste bei der Konstruktion des vectors für das bloße Besorgen des Speichers auch noch keine Kosten, aber der vector ist so bescheuert, daß er alle seine Elemente erstmal initialisiert, im falle von vector&lt;unsigned int&gt;, meint er, die alle erstmal mit 0 beschreiben zu müssen. Du hättest nur dieses Problem zu beheben, nimm vielleicht einfach mal testhalber rohen Speicher und vergleiche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378462</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 20 Jan 2014 10:04:49 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 13:05:36 GMT]]></title><description><![CDATA[<p>Oder nimm <code>reserve()</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378493</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 20 Jan 2014 13:05:36 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 13:55:56 GMT]]></title><description><![CDATA[<p>ChefDerDeutschenBank schrieb:</p>
<blockquote>
<p>Die Groesse veraendert sich auch bis zum Programmende nicht. Es wird also kein push_back (und es werden keine Elemente geloescht).</p>
</blockquote>
<p>Warum nimmst du dann nicht den seit C++11 etablierten <a href="http://www.cplusplus.com/reference/array/array/?kw=array" rel="nofollow">Array</a>?</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378503</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Mon, 20 Jan 2014 13:55:56 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 14:24:44 GMT]]></title><description><![CDATA[<p>Klaus82 schrieb:</p>
<blockquote>
<p>Warum nimmst du dann nicht den seit C++11 etablierten <a href="http://www.cplusplus.com/reference/array/array/?kw=array" rel="nofollow">Array</a>?</p>
</blockquote>
<p>ChefDerDeutschenBank schrieb:</p>
<blockquote>
<p>Die Daten kommen aus einer Datei, und die groesse weiss ich wenn ich die Datei lese.</p>
</blockquote>
<p>compile-time fstream 4tw! <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/2378508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378508</guid><dc:creator><![CDATA[Desdemona]]></dc:creator><pubDate>Mon, 20 Jan 2014 14:24:44 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 15:37:50 GMT]]></title><description><![CDATA[<p>Desdemona schrieb:</p>
<blockquote>
<p>compile-time fstream <strong>4tw!</strong> <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>
</blockquote>
<p>Und auf Deutsch? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378526</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Mon, 20 Jan 2014 15:37:50 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 16:47:09 GMT]]></title><description><![CDATA[<p>Klaus82 schrieb:</p>
<blockquote>
<p>Warum nimmst du dann nicht den seit C++11 etablierten <a href="http://www.cplusplus.com/reference/array/array/?kw=array" rel="nofollow">Array</a>?</p>
</blockquote>
<p>Das gibts schon seit TR1.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378546</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 20 Jan 2014 16:47:09 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 16:57:38 GMT]]></title><description><![CDATA[<p>Klaus82 schrieb:</p>
<blockquote>
<p>Und auf Deutsch? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>std::array hat eine Größe, die zur Compilezeit feststehen muss. Die Größe wird aber erst zur Laufzeit aus der Datei gelesen. Daher kann std::array nicht verwendet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378552</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Mon, 20 Jan 2014 16:57:38 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 17:17:12 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Klaus82 schrieb:</p>
<blockquote>
<p>Warum nimmst du dann nicht den seit C++11 etablierten <a href="http://www.cplusplus.com/reference/array/array/?kw=array" rel="nofollow">Array</a>?</p>
</blockquote>
<p>Das gibts schon seit TR1.</p>
</blockquote>
<p>Jo,<br />
aber jetzt lässt es sich einfach so verwenden, ohne ein zusätzliches Fass aufzumachen. <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>nwp3 schrieb:</p>
<blockquote>
<p>std::array hat eine Größe, die zur Compilezeit feststehen muss. Die Größe wird aber erst zur Laufzeit aus der Datei gelesen. Daher kann std::array nicht verwendet werden.</p>
</blockquote>
<p>Also folgendes funktioniert bei mir, geht also auch zur Laufzeit.</p>
<pre><code class="language-cpp">#include &lt;array&gt;
#include &lt;iostream&gt;

int main()
{
	// das Einlesen der Datei sagt, dass 10 Elemente benötigt werden
	unsigned int const n = 10;

	std::array&lt;double,n&gt; arr;

	arr[0] = 1.5;

	std::cout &lt;&lt; arr[0] &lt;&lt; std::endl;

	return 0;
}
</code></pre>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378557</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Mon, 20 Jan 2014 17:17:12 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 17:37:22 GMT]]></title><description><![CDATA[<p>Dann lass mal das const beim n weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378566</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 20 Jan 2014 17:37:22 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 18:22:17 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Dann lass mal das const beim n weg.</p>
</blockquote>
<p>Ja schon klar, dann funktioniert es nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Aber nachdem ich eben schreiben kann</p>
<pre><code>int const n = funktionDieMirDieNoetigeZahlAnElementenAusDateiLiefert();
</code></pre>
<p>ist doch alles in Butter - zur Laufzeit.</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378583</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Mon, 20 Jan 2014 18:22:17 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 18:22:03 GMT]]></title><description><![CDATA[<p>Klaus82 schrieb:</p>
<blockquote>
<p>ist doch alles in Butter - zur Laufzeit.</p>
</blockquote>
<p>Ja, zur Laufzeit.<br />
Templateparameter sind aber Teil des Typen und Typen werden zur COMPILE-Zeit bestimmt. Da kannst du keine Laufzeitvariable hin tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378584</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 20 Jan 2014 18:22:03 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 18:23:10 GMT]]></title><description><![CDATA[<p>Klaus82 schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Dann lass mal das const beim n weg.</p>
</blockquote>
<p>Ja schon klar, dann funktioniert es nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Aber nachdem ich eben schreiben kann</p>
<pre><code>int const n = funktionDieMirDieNoetigeZahlAnElementenAusDateiLiefert();
</code></pre>
<p>ist doch alles in Butter - zur Laufzeit.</p>
<p>Gruß,<br />
-- Klaus.</p>
</blockquote>
<p>Da ist beim Array nichts in Butter... Laufzeitkonstant reicht bei Templates nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378585</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Mon, 20 Jan 2014 18:23:10 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 18:23:49 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Klaus82 schrieb:</p>
<blockquote>
<p>ist doch alles in Butter - zur Laufzeit.</p>
</blockquote>
<p>Ja, zur Laufzeit.<br />
Templateparameter sind aber Teil des Typen und Typen werden zur COMPILE-Zeit bestimmt. Da kannst du keine Laufzeitvariable hin tun.</p>
</blockquote>
<p>Also ist diese <code>const</code> Definition ein workaround?</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378586</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Mon, 20 Jan 2014 18:23:49 GMT</pubDate></item><item><title><![CDATA[Reply to Custom Allocator fuer std::vector on Mon, 20 Jan 2014 18:30:54 GMT]]></title><description><![CDATA[<p>Klaus82 schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Klaus82 schrieb:</p>
<blockquote>
<p>ist doch alles in Butter - zur Laufzeit.</p>
</blockquote>
<p>Ja, zur Laufzeit.<br />
Templateparameter sind aber Teil des Typen und Typen werden zur COMPILE-Zeit bestimmt. Da kannst du keine Laufzeitvariable hin tun.</p>
</blockquote>
<p>Also ist diese <code>const</code> Definition ein workaround?</p>
<p>Gruß,<br />
-- Klaus.</p>
</blockquote>
<p>Wenn du folgendes hast:</p>
<pre><code>const int i = 5;
</code></pre>
<p>Ist der Compiler in der Lage i hardzucoden, überall dort wo i steht, steht dann im Programmcode quasi 5. Deshalb kannst du das auch als Templateparameter nutzen.<br />
Ersetzt du das aber durch bspw:</p>
<pre><code>const int i = foo();
</code></pre>
<p>Kann diese Optimierung nicht stattfinden. Es gibt dann lediglich einen Fehler, wenn du versuchst i zu ändern. Dann kannst du das nicht mehr als Templateparameter verwenden, obowhl du kaum was geändert hast.<br />
Aus diesem Grund gibt es seit C++11 constexpr, dann gibt es einen Fehler, wenn du das versuchst zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2378587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2378587</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 20 Jan 2014 18:30:54 GMT</pubDate></item></channel></rss>