<?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[Heap Fragmentierung]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich programmiere zwar hauptsächlich in C#, was bedeutet, dass ich mir beim Großteil meiner Arbeit keine Gedanken über Heap Fragmentierung zu machen habe, dennoch bin ich einigermaßen an dem Thema interessiert.<br />
Welche Arten von C/C++ Programmen sind dabei besonders gefährdet und was kann man machen um Probleme mit der Heap Fragmentierung bei diesen Projekten zu umgehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/130386/heap-fragmentierung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 16:15:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/130386.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Dec 2005 14:43:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Heap Fragmentierung on Thu, 22 Dec 2005 14:43:00 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich programmiere zwar hauptsächlich in C#, was bedeutet, dass ich mir beim Großteil meiner Arbeit keine Gedanken über Heap Fragmentierung zu machen habe, dennoch bin ich einigermaßen an dem Thema interessiert.<br />
Welche Arten von C/C++ Programmen sind dabei besonders gefährdet und was kann man machen um Probleme mit der Heap Fragmentierung bei diesen Projekten zu umgehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/947860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/947860</guid><dc:creator><![CDATA[tommazzo]]></dc:creator><pubDate>Thu, 22 Dec 2005 14:43:00 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Fragmentierung on Thu, 22 Dec 2005 15:46:33 GMT]]></title><description><![CDATA[<p>Da alle modernen Betriebsysteme Paging vornehmen (Stichwort: virtueller Arbeitsspeicher),<br />
liegt der vom Programm angeforderte Speicher sowieso im ganzen physikalisch<br />
vorhanden Arbeitsspeicher verstreut (nur zu sog. &quot;Pages&quot; zusammengefasst).</p>
<p>Daher hat das Anfordern von Speicher keinen Einfluss auf die Fragmentierung,<br />
zumindest wenn man nicht zu genau hinschaut.<br />
Was natürlich passieren kann, ist, dass ein Programm soviel Speicher anfordert,<br />
dass er gerade nicht in eine Page hineinpasst.</p>
<p>Dann werden 2 Pages verwendet, wobei von der zweiten dann aber z. B. nur ein<br />
einzelnes Byte wirklich verwendet wird, der Rest bleibt dann ungenutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/947920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/947920</guid><dc:creator><![CDATA[anonymus]]></dc:creator><pubDate>Thu, 22 Dec 2005 15:46:33 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Fragmentierung on Thu, 22 Dec 2005 20:25:41 GMT]]></title><description><![CDATA[<p>Das mit dem Paging stimmt schon, aber die Art der Heapfragmentierung ist eine andere Geschichte. Der Heap hat ja auch unabhängig von den bereits allokierten Speicherseiten (ob die fragmentiert sind oder nicht) eine logische Struktur, die aus Speicherblöcken verschiedener Größe besteht. Wenn man in seinem Programm sehr häufig Speicher in unterschiedlichen Größen anfordert und sie in unterschiedlicher Reihenfolge wieder freigibt, entsteht natürlich eine Fragmentierung um dessen Beseitigung sich das Betriebssystem bei unmanaged Code natürlich nicht kümmert und auch nicht kümmern kann. Abhilfe schafft da nur, mit dem Heap behutsam umzugehen und ihn nicht zu sehr zu fordern oder man bedient sich einer Möglichkeit, die das Betriebssystem bietet, zum Beispiel bei Windows das Allokieren mehrerer Heaps für verschiedene Anforderungen oder das Nutzen des Low-Fragmentation-Heaps.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948114</guid><dc:creator><![CDATA[masterofx32]]></dc:creator><pubDate>Thu, 22 Dec 2005 20:25:41 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Fragmentierung on Thu, 22 Dec 2005 20:52:45 GMT]]></title><description><![CDATA[<p>Schön langsam wird das ganze etwas durchsichtiger für mich :xmas1: .<br />
Hast du rein zufällig einen Link wo ich mehr über das Verwenden von mehreren Heaps erfahren kann?<br />
Apropos Low Fragmentation Heap: Wird der ab WinXP nicht automatisch verwendet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948132</guid><dc:creator><![CDATA[tommazzo]]></dc:creator><pubDate>Thu, 22 Dec 2005 20:52:45 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Fragmentierung on Thu, 22 Dec 2005 22:07:17 GMT]]></title><description><![CDATA[<p>Hier die Links zu den entsprechenden MSDN-Seiten. Der Low Fragmentation Heap ist demnach nur bei expliziter Aktivierung aktiv.</p>
<p><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/memory_management_functions.asp" rel="nofollow">Memory Management Functions</a></p>
<p><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/low_fragmentation_heap.asp" rel="nofollow">Low Fragmentation Heap</a></p>
<p>@ anonymus:</p>
<p>Nochmal zur Sache mit der Fragmentierung - die allokierten Speicherblöcke selbst werden natürlich nicht zerteilt(sie liegen also aus Sicht der Speicheradressierung in einem Stück vor), was du wohl meintest. Die Fragmentierung des Heaps findet also nur zwischen den Speicherblöcken und freiem Speicher statt. Das wirkt sich also nicht wie bei Festplatten durch langsameren Zugriff auf den Speicher aus, sondern dadurch, dass im Extremfall kein Speicher verfügbar ist, wenn man beispielsweise 100MB Speicher anfordert, der zwar vorhanden ist, aber nicht mehr in einem Stück auf dem Heap allokiert werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948178</guid><dc:creator><![CDATA[masterofx32]]></dc:creator><pubDate>Thu, 22 Dec 2005 22:07:17 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Fragmentierung on Thu, 22 Dec 2005 22:21:33 GMT]]></title><description><![CDATA[<p>Ich denke mal alle modernen PC-Betriebssysteme machen paging, aber die embedded Betriebssystem, die ich kenne machen dass nicht.<br />
Übrigens: der Oberkiller ist sprintf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948188</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Thu, 22 Dec 2005 22:21:33 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Fragmentierung on Fri, 23 Dec 2005 15:49:50 GMT]]></title><description><![CDATA[<p>Also schon mal vielen Dank für alles. Zwei Sachen sind mir allerdings noch etwas unklar:<br />
1. Zur Heap Fragmentierung können nicht nur von mir mit new und malloc() angelegte Objekte, sondern auch z.B. mit mit der WinAPI erstellte HWNDs oder HBITMAPs beitragen - ist das richtig?<br />
2. Wenn ich Speicher anfordere, der nicht ganz in eine Page passt, müssen trotzdem alle Pages direkt hintereinander im Speicher liegen, was unter gewissen Umständen bedeuten kann, dass auch andere Programme, deren Heap fragmentiert ist, zu Probleme in meinem Programm führen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948720</guid><dc:creator><![CDATA[tommazzo]]></dc:creator><pubDate>Fri, 23 Dec 2005 15:49:50 GMT</pubDate></item><item><title><![CDATA[Reply to Heap Fragmentierung on Fri, 23 Dec 2005 18:22:07 GMT]]></title><description><![CDATA[<p>1. Ja, richtig.</p>
<p>tommazzo schrieb:</p>
<blockquote>
<p>2. Wenn ich Speicher anfordere, der nicht ganz in eine Page passt, müssen trotzdem alle Pages direkt hintereinander im Speicher liegen, was<br />
unter gewissen Umständen bedeuten kann, dass auch andere Programme, deren Heap fragmentiert ist, zu Probleme in meinem Programm führen können.</p>
</blockquote>
<p>Nein. Du verwechselst Speicherfragmentierung mit Adressraumfragmentierung. Dass der Speicher fragmentiert ist, ist völlig egal, weil sich das Paging darum kümmert. Adressraumfragmentierung ist das, was Probleme macht. Nachdem aber jeder Prozess einen eigenen Adressraum hat, kann da ein anderer nicht reinpfuschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/948808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/948808</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Fri, 23 Dec 2005 18:22:07 GMT</pubDate></item></channel></rss>