<?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[std::deque real_max_size &amp;lt;&amp;lt;&amp;lt; max_size]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin auf der Suche nach einer Datenstruktur, welche eine sehr große Menge an Daten beinhalten kann (ca. 10 GB).<br />
Der std::vector steigt relativ schnell aus, da er ja den Speicher am Stück reservieren muss.</p>
<p>Frage 1: Warum kann das aufgrund von Fragmentierung passieren? Bei einem 64 Bit System müsste doch immer &quot;irgendwo&quot; noch ein genügend großer virtuelle Speicherbereich frei sein.</p>
<p>Danach habe ich mir die std::deque angeguckt. Diese verwaltet die Daten in Chunks.<br />
Doch auch die steigt bei der gleichen Größe (ca. 1 GB) aus.</p>
<p>Frage 2: Wie kann das sein? Das System ist ein 64 Bit Windows 10 mit 12 GB Ram.<br />
Wenn ich manuell mehre Chunks reserviere, dann kann ich locker die 10 GB erreichen.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;deque&gt;

int main(int argc, char *argv[])
{
    const std::size_t mb = 1000 * 1000;
    std::size_t i = 1;
    try {
        for (; i &lt; 1000000; i *= 10) {
            std::deque&lt;char&gt; a;
            a.resize(i * mb);
            std::cout &lt;&lt; a.size() / mb &lt;&lt; &quot; MB &quot; &lt;&lt; std::endl;
        }
    } catch(...) {
        std::cout &lt;&lt; &quot;bad alloc at &quot; &lt;&lt; i &lt;&lt; &quot; MB&quot; &lt;&lt; std::endl;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/338821/std-deque-real_max_size-lt-lt-lt-max_size</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 02:52:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338821.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Jul 2016 09:02:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::deque real_max_size &amp;lt;&amp;lt;&amp;lt; max_size on Wed, 13 Jul 2016 09:02:55 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin auf der Suche nach einer Datenstruktur, welche eine sehr große Menge an Daten beinhalten kann (ca. 10 GB).<br />
Der std::vector steigt relativ schnell aus, da er ja den Speicher am Stück reservieren muss.</p>
<p>Frage 1: Warum kann das aufgrund von Fragmentierung passieren? Bei einem 64 Bit System müsste doch immer &quot;irgendwo&quot; noch ein genügend großer virtuelle Speicherbereich frei sein.</p>
<p>Danach habe ich mir die std::deque angeguckt. Diese verwaltet die Daten in Chunks.<br />
Doch auch die steigt bei der gleichen Größe (ca. 1 GB) aus.</p>
<p>Frage 2: Wie kann das sein? Das System ist ein 64 Bit Windows 10 mit 12 GB Ram.<br />
Wenn ich manuell mehre Chunks reserviere, dann kann ich locker die 10 GB erreichen.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;deque&gt;

int main(int argc, char *argv[])
{
    const std::size_t mb = 1000 * 1000;
    std::size_t i = 1;
    try {
        for (; i &lt; 1000000; i *= 10) {
            std::deque&lt;char&gt; a;
            a.resize(i * mb);
            std::cout &lt;&lt; a.size() / mb &lt;&lt; &quot; MB &quot; &lt;&lt; std::endl;
        }
    } catch(...) {
        std::cout &lt;&lt; &quot;bad alloc at &quot; &lt;&lt; i &lt;&lt; &quot; MB&quot; &lt;&lt; std::endl;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2502122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502122</guid><dc:creator><![CDATA[max_size]]></dc:creator><pubDate>Wed, 13 Jul 2016 09:02:55 GMT</pubDate></item><item><title><![CDATA[Reply to std::deque real_max_size &amp;lt;&amp;lt;&amp;lt; max_size on Wed, 13 Jul 2016 09:43:10 GMT]]></title><description><![CDATA[<p>Du erzeugst auch ein 64 Bit Programm?</p>
<p>max_size schrieb:</p>
<blockquote>
<p>Der std::vector steigt relativ schnell aus, da er ja den Speicher am Stück reservieren muss.</p>
</blockquote>
<p>Kann ich nicht nachvollziehen und halte ich für ein Gerücht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502131</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 13 Jul 2016 09:43:10 GMT</pubDate></item><item><title><![CDATA[Reply to std::deque real_max_size &amp;lt;&amp;lt;&amp;lt; max_size on Wed, 13 Jul 2016 13:21:42 GMT]]></title><description><![CDATA[<p><code>std::deque</code> hat zumindest in &quot;meiner&quot; Dinkumware und STLport Implementation einen riesigen Overhead pro Chunk. In den o.g. Implementationen ist jeder Chunk 16 Byte oder 1 Element (für Datentypen mit einer Größe &gt; 16 Byte) groß, das ist für große Datenmengen völlig unbrauchbar.<br />
Leider kann man die Blockgröße für <code>std::deque</code> nicht festlegen und damit den Overhead reduzieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502155</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 13 Jul 2016 13:21:42 GMT</pubDate></item><item><title><![CDATA[Reply to std::deque real_max_size &amp;lt;&amp;lt;&amp;lt; max_size on Wed, 13 Jul 2016 17:15:49 GMT]]></title><description><![CDATA[<p>Unter Windows, d.h. im Visual Studio, muss man den Linker Parameter für große Addressen aktivieren, sonst kann/darf der Prozess maximal 2 oder 3 GB haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502203</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 13 Jul 2016 17:15:49 GMT</pubDate></item><item><title><![CDATA[Reply to std::deque real_max_size &amp;lt;&amp;lt;&amp;lt; max_size on Wed, 13 Jul 2016 18:21:55 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Unter Windows, d.h. im Visual Studio, muss man den Linker Parameter für große Addressen aktivieren, sonst kann/darf der Prozess maximal 2 oder 3 GB haben.</p>
</blockquote>
<p>Du sprichst jetzt davon, einem 32Bit Programm mehr als 2 GB zu erlauben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502226</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 13 Jul 2016 18:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to std::deque real_max_size &amp;lt;&amp;lt;&amp;lt; max_size on Wed, 13 Jul 2016 18:24:59 GMT]]></title><description><![CDATA[<p>Versuch doch mal, einen std::vector mit 10GB reservierter Größe zu erzeugen.<br />
Unter 64bit sollte das bei den meisten Systemen gut funktionieren, da der virtuelle Speicher erst auf physikalischen Speicher abgebildet wird, wenn auf den Speicher auch zugegriffen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502227</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Wed, 13 Jul 2016 18:24:59 GMT</pubDate></item><item><title><![CDATA[Reply to std::deque real_max_size &amp;lt;&amp;lt;&amp;lt; max_size on Wed, 13 Jul 2016 21:17:19 GMT]]></title><description><![CDATA[<p>Das Problem ist sicher dass er ne 32 Bit .exe baut.<br />
Da passt 1 GB ziemlich gut mit meinen Erfahrungen zusammen. Für nen 64 Bit Prozess wäre es lächerlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2502254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2502254</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 13 Jul 2016 21:17:19 GMT</pubDate></item></channel></rss>