<?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[Speicheroverhead new]]></title><description><![CDATA[<p>Hoi,<br />
Was ist denn ungefähr der Speicheroverhead bei der Heapallozierung per new?</p>
<p>Angenommen</p>
<pre><code>int* v = new int;
</code></pre>
<p>Wie viel Speicher geht dafür drauf? Offensichtlich 4 Bytes + eventuelles Alignment + ein paar interne Pointer?<br />
Was sagt der Standard dazu? Wird das int an einer Addresse mod 4 == 0 angelegt (was zu erwarten wäre)? (Auf ner x86/x64 Kiste)</p>
<p>Danke und Grüße,<br />
Flo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313601/speicheroverhead-new</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 03:54:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313601.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Feb 2013 12:08:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicheroverhead new on Tue, 05 Feb 2013 12:10:43 GMT]]></title><description><![CDATA[<p>Hoi,<br />
Was ist denn ungefähr der Speicheroverhead bei der Heapallozierung per new?</p>
<p>Angenommen</p>
<pre><code>int* v = new int;
</code></pre>
<p>Wie viel Speicher geht dafür drauf? Offensichtlich 4 Bytes + eventuelles Alignment + ein paar interne Pointer?<br />
Was sagt der Standard dazu? Wird das int an einer Addresse mod 4 == 0 angelegt (was zu erwarten wäre)? (Auf ner x86/x64 Kiste)</p>
<p>Danke und Grüße,<br />
Flo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296180</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 05 Feb 2013 12:10:43 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheroverhead new on Tue, 05 Feb 2013 12:14:38 GMT]]></title><description><![CDATA[<p>Ich würde mal schätzen sizeof(zeiger), eventuelles Padding würde ich ausschließen, da es sich ja nicht um eine Struktur handelt.</p>
<p>Der Speicher der alloziert wird, der sollte auch nur die engeforderte Größe einnehmen. (alles rein intuitive Aussagen)</p>
<p>Dass der Standard dazu etwas sagt bezweifle ich, da das ja schon ziemlich systemnah ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296184</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 05 Feb 2013 12:14:38 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheroverhead new on Tue, 05 Feb 2013 12:21:18 GMT]]></title><description><![CDATA[<p>Alle Objekte werden mit ihrem maschinenabhängigen Alignment angelegt. Speicherreservierungen ohne zur Compilezeit festehendem Typ werden so ausgerichtet, dass das Alignment für alle denkbaren Typen passt. Darüber hinaus wird vom Standard nichts festgelegt.</p>
<p>Praktisch gilt:<br />
1. Alignment &quot;verbraucht&quot; keinen Speicher, außer du allokierst wirklich Speichermengen, die nicht ins Raster passen. Dann hast du eventuell kleine Lücken, so ähnlich wie bei den Paddingbytes in Strukturen. Kommt auch drauf an, wie der Speichermanager intern arbeitet.<br />
2. Irgendwo wird in der Praxis noch die Größe des Bereiches gespeichert, eventuell auch noch ein zugehöriger Zeiger auf den Anfang. Also ungefähr ein bis zwei intptr_t.</p>
<p>Frage ist auch: Wieso sollte diese Information wichtig sein? Deine Frage klingt so, als wolltest du eigentlich etwas ganz anderes wissen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296187</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 05 Feb 2013 12:21:18 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheroverhead new on Tue, 05 Feb 2013 12:22:55 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Wie viel Speicher geht dafür drauf? Offensichtlich 4 Bytes + eventuelles Alignment + ein paar interne Pointer?<br />
Was sagt der Standard dazu?</p>
</blockquote>
<p>Der sagt nix dazu ... soweit ich weiß.</p>
<p>Ethon schrieb:</p>
<blockquote>
<p>Wird das int an einer Addresse mod 4 == 0 angelegt (was zu erwarten wäre)? (Auf ner x86/x64 Kiste)</p>
</blockquote>
<p>malloc liefert jedenfalls einen Zeiger zurück der so aligned ist, dass du ohne Probleme alles Mögliche (Zeiger, double, ... ) da speichern kannst, ohne dass es Probleme bzgl Alignment macht. Ich schätze, das sieht bei dem default new-Operator nicht anders aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296188</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 05 Feb 2013 12:22:55 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheroverhead new on Tue, 05 Feb 2013 12:25:53 GMT]]></title><description><![CDATA[<p>Wie gross der Speicheroverhead ist kann man so nicht sagen. Das kommt auf die Implementierung der Dynamic Memory Allocation an.</p>
<p>Die Alignment Boundaries haengen vom Betriebssystem ab. Siehe zum Beispiel hier: <a href="http://en.wikipedia.org/wiki/Data_structure_alignment#Typical_alignment_of_C_structs_on_x86" rel="nofollow">http://en.wikipedia.org/wiki/Data_structure_alignment#Typical_alignment_of_C_structs_on_x86</a><br />
Etwas ueberraschend ist dabei, dass Windows ein double 8-byte aligned und Linux 4-byte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296192</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Tue, 05 Feb 2013 12:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheroverhead new on Tue, 05 Feb 2013 12:32:29 GMT]]></title><description><![CDATA[<p>Danke schön, scheint also nicht so dramatisch wie angenommen. <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>
<blockquote>
<p>Frage ist auch: Wieso sollte diese Information wichtig sein? Deine Frage klingt so, als wolltest du eigentlich etwas ganz anderes wissen.</p>
</blockquote>
<p>Och, ich mache gerade bezüglich dem Speicherverbrauch meines Programmes ein paar Worst-Case Abschätzungen und da ich aus Polymorphiegründen große Mengen kleiner Objekte auf dem Heap anlege war der Overhead von new ein unbekannter Parameter in meinen Überlegungen der mich gestört hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296197</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 05 Feb 2013 12:32:29 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheroverhead new on Tue, 05 Feb 2013 12:34:45 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Och, ich mache gerade bezüglich dem Speicherverbrauch meines Programmes ein paar Worst-Case Abschätzungen und da ich aus Polymorphiegründen große Mengen kleiner Objekte auf dem Heap anlege war der Overhead von new ein unbekannter Parameter in meinen Überlegungen der mich gestört hat.</p>
</blockquote>
<p>Viel relevanter wäre wohl die Performance.</p>
<p>Ansonsten: einfach eigenen allokator verwenden der in chunks allokiert. Wenn deine Objekte alle gleich groß sind, dann geht das ziemlich einfach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296198</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 05 Feb 2013 12:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheroverhead new on Tue, 05 Feb 2013 12:43:09 GMT]]></title><description><![CDATA[<blockquote>
<p>Viel relevanter wäre wohl die Performance.</p>
</blockquote>
<p>Ein langsames Programm ist besser als ein Programm, das garnicht läuft weil der Speicher nicht reicht. <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="😃"
    /><br />
Performance ist weniger da Problem, das meiste dümpelt mehr oder weniger tot im Speicher rum bis es mal gebraucht wird. Ich versuch mal nicht den genauen Sachverhalt hier zu erklären, geht jedenfalls nicht wirklich anders.</p>
<blockquote>
<p>Ansonsten: einfach eigenen allokator verwenden der in chunks allokiert. Wenn deine Objekte alle gleich groß sind, dann geht das ziemlich einfach.</p>
</blockquote>
<p>Da eigentlich alle &quot;Problemobjekte&quot; gleich lange leben wäre es sogar als Stackallocator machbar ... aber solange es mit new klappt, ist es mir recht und ich denke erst an Optimierungen wenn es ein Problem wird. Passe halt nur auf dass Optimierungen nachträglich kein Problem sind. <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/2296202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296202</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 05 Feb 2013 12:43:09 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheroverhead new on Tue, 05 Feb 2013 13:01:38 GMT]]></title><description><![CDATA[<p>vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296207</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 05 Feb 2013 13:01:38 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheroverhead new on Tue, 05 Feb 2013 14:53:49 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<pre><code>int* v = new int;
</code></pre>
<p>Wie viel Speicher geht dafür drauf? Offensichtlich 4 Bytes + eventuelles Alignment + ein paar interne Pointer?</p>
</blockquote>
<p>Kommt drauf an.<br />
Es gibt Allokatoren die dafür &lt; 4.1 Byte (amortisiert) brauchen.<br />
Andere brauchen dafür &gt;= 16 Byte.</p>
<blockquote>
<p>Was sagt der Standard dazu? Wird das int an einer Addresse mod 4 == 0 angelegt (was zu erwarten wäre)? (Auf ner x86/x64 Kiste)</p>
</blockquote>
<p>Der Standard schreibt nicht vor was <code>int</code> für ein Alignment zu haben hat. Am besten du liest dir die entsprechenden Stellen selbst durch wenn dich interessiert was der Standard zum Thema Alignment genau vorschreibt, und was der Implementierung überlassen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296240</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 05 Feb 2013 14:53:49 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheroverhead new on Tue, 05 Feb 2013 16:05:56 GMT]]></title><description><![CDATA[<p>Small Object Allocator?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2296254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2296254</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Tue, 05 Feb 2013 16:05:56 GMT</pubDate></item></channel></rss>