<?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[Dateien, größer als RAM laden]]></title><description><![CDATA[<p>Ich wollte mal wissen, wie es z.B. Packprogramme wie Winrar schaffen,<br />
Dateien zu lesen, die größer sind als mein Arbeitsspeicher.</p>
<p>Denn, wenn ich eine Datei lesen möchte, lade ich sie immer in den Heap.<br />
Auch Texteditoren benutzen soweit ich weiß dieses Verfahren...<br />
Allerdings ist dann bei mir bei ca. 2,5 GB Schluss!</p>
<p>Aber wenn ich eine 100 GB .rar Datei mit Winrar, 7zip, etc. lade,<br />
ändert sich fast nichts an meinem Arbeitsspeicher.</p>
<p>Wie kann ich so etwas in meinen Programmen umsetzen? (Spezielles Verfahren <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/294863/dateien-größer-als-ram-laden</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 17:20:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294863.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Nov 2011 17:37:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dateien, größer als RAM laden on Wed, 02 Nov 2011 17:37:57 GMT]]></title><description><![CDATA[<p>Ich wollte mal wissen, wie es z.B. Packprogramme wie Winrar schaffen,<br />
Dateien zu lesen, die größer sind als mein Arbeitsspeicher.</p>
<p>Denn, wenn ich eine Datei lesen möchte, lade ich sie immer in den Heap.<br />
Auch Texteditoren benutzen soweit ich weiß dieses Verfahren...<br />
Allerdings ist dann bei mir bei ca. 2,5 GB Schluss!</p>
<p>Aber wenn ich eine 100 GB .rar Datei mit Winrar, 7zip, etc. lade,<br />
ändert sich fast nichts an meinem Arbeitsspeicher.</p>
<p>Wie kann ich so etwas in meinen Programmen umsetzen? (Spezielles Verfahren <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2139461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139461</guid><dc:creator><![CDATA[biggg heappp]]></dc:creator><pubDate>Wed, 02 Nov 2011 17:37:57 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien, größer als RAM laden on Wed, 02 Nov 2011 17:42:04 GMT]]></title><description><![CDATA[<p>Geheimtrick, nicht weitersagen: Die brauchen nicht alles auf einmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139463</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 02 Nov 2011 17:42:04 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien, größer als RAM laden on Wed, 02 Nov 2011 21:14:52 GMT]]></title><description><![CDATA[<p>Wie SeppJ schon erwaehnt hat. Die lesen die Dateien blockweise aus - also die brauchen nicht alles auf einmal. Das nennt man &quot;memory mapped file&quot; (wenn du danach googlest solltest du genuegend infos finden).<br />
Die Standardbibliothek unterstuetzt das leider nicht, aber boost (Qt auch). Oder du benutzt halt die nativen API-Funktionen, in der WinAPI heisst die &quot;CreateFileMapping&quot;, glaub ich - unter Unix-Systeme mmap.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139570</guid><dc:creator><![CDATA[FileMapping]]></dc:creator><pubDate>Wed, 02 Nov 2011 21:14:52 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien, größer als RAM laden on Wed, 02 Nov 2011 21:25:24 GMT]]></title><description><![CDATA[<p>Dafür braucht es auch keine file mappings, das gäbe bei einem 32-Bit-Prozess genauso Probleme.<br />
Es reicht, die Daten einzulesen, die du gerade brauchst. Bei einem Archiv also zunächst nur die Metadaten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139576</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Wed, 02 Nov 2011 21:25:24 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien, größer als RAM laden on Wed, 02 Nov 2011 22:02:27 GMT]]></title><description><![CDATA[<p>(Kein Mecker, sondern nur Ergänzung:)</p>
<p>Athar schrieb:</p>
<blockquote>
<p>Dafür braucht es auch keine file mappings,</p>
</blockquote>
<p>So ist es. Prinzipiell kann man sich (sogar recht kleine und einfache) Klassen bauen, die die file mappings simulieren. Die vom Betriebssystem zu nehmen, ist aber ungleich schlauer, weil das BS s sauviel zusätzlich weiß, was ich nicht wissen kann.</p>
<p>Betrifft aber normale Packer gar nicht. Die packen einfach streams und haben ein Gedächtnis von soundsoviel Speicher, um besser vorhersagen zu können. Manche laden auch immer nacheinander Blöcke von soundsoviel Speicher und packen die unabhängig von der Vorgeschichte. Die sind auch nicht messbar schlechter. Aber keiner muß die gesamte Datei sehen können. Immer nur ein Stückchen reicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139588</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 02 Nov 2011 22:02:27 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien, größer als RAM laden on Wed, 02 Nov 2011 22:49:49 GMT]]></title><description><![CDATA[<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139617</guid><dc:creator><![CDATA[biggg heappp]]></dc:creator><pubDate>Wed, 02 Nov 2011 22:49:49 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien, größer als RAM laden on Thu, 03 Nov 2011 05:19:13 GMT]]></title><description><![CDATA[<p>Wieso kommt man nicht selber auf sowas? Überhaupt keine Kreativität?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139662</guid><dc:creator><![CDATA[ehrlich]]></dc:creator><pubDate>Thu, 03 Nov 2011 05:19:13 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien, größer als RAM laden on Thu, 03 Nov 2011 14:06:12 GMT]]></title><description><![CDATA[<p>Athar schrieb:</p>
<blockquote>
<p>Dafür braucht es auch keine file mappings, das gäbe bei einem 32-Bit-Prozess genauso Probleme.</p>
</blockquote>
<p>Welche? Die wuerden mich interessieren. <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="🙂"
    /> Probleme wuerde es wohl nur geben, wenn du mehr als 4 GB <em>auf einmal</em> mappen wuerdest. Ansonsten kann man auch mit einer 32bit Anwendung Dateien ueber 4GB mittels Memory Mapping lesen und schreiben.</p>
<p>volkard schrieb:</p>
<blockquote>
<p>(Kein Mecker, sondern nur Ergänzung:)</p>
<p>Athar schrieb:</p>
<blockquote>
<p>Dafür braucht es auch keine file mappings,</p>
</blockquote>
<p>So ist es. Prinzipiell kann man sich (sogar recht kleine und einfache) Klassen bauen, die die file mappings simulieren. Die vom Betriebssystem zu nehmen, ist aber ungleich schlauer, weil das BS s sauviel zusätzlich weiß, was ich nicht wissen kann.</p>
<p>Betrifft aber normale Packer gar nicht. Die packen einfach streams und haben ein Gedächtnis von soundsoviel Speicher, um besser vorhersagen zu können. Manche laden auch immer nacheinander Blöcke von soundsoviel Speicher und packen die unabhängig von der Vorgeschichte. Die sind auch nicht messbar schlechter. Aber keiner muß die gesamte Datei sehen können. Immer nur ein Stückchen reicht.</p>
</blockquote>
<p>Schon ja, man muss memory mapping ja nicht direkt verwenden. Es gibt sicherlich Klassen, die den memory mapping vorgang abstrahieren - aber auf &quot;herkoemmlichem&quot; Wege (z.B. mit der Standardbibliothek) wird die Datei immer zuerst komplett in die RAM gelesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139827</guid><dc:creator><![CDATA[FileMapping]]></dc:creator><pubDate>Thu, 03 Nov 2011 14:06:12 GMT</pubDate></item></channel></rss>