<?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[Virtueller Speicher von operator new()?]]></title><description><![CDATA[<p>Betriebssysteme erlauben es ja, virtuellen Speicher anzufordern, was ich überaus praktisch finde. Nur seltsamerweise geht das nur mit malloc, nicht mit operator new.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;limits&gt;
#include &lt;memory&gt;
#include &lt;cstdlib&gt;
int main()
{
  // übersteigt die Kapatizät meines RAMs bei weitem
  const std::size_t s = std::numeric_limits&lt;std::size_t&gt;::max()/8;

  void *a = calloc(s,1);
  std::cout &lt;&lt; &quot;a&quot; &lt;&lt; std::endl;
  void *b = malloc(s);
  std::cout &lt;&lt; &quot;b&quot; &lt;&lt; std::endl;
  void *c = operator new(s);
  std::cout &lt;&lt; &quot;c&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>a
b
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
</code></pre>
<p>(Wenn ich operator new als erstes ausführe kommt immer noch ein bad_alloc.)</p>
<p>Hat jemand eine Idee, warum das so ist? Geht calloc/malloc nur zufällig oder wird das auch auf anderen Plattformen laufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319347/virtueller-speicher-von-operator-new</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 07:33:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319347.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Aug 2013 22:36:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtueller Speicher von operator new()? on Wed, 14 Aug 2013 22:36:03 GMT]]></title><description><![CDATA[<p>Betriebssysteme erlauben es ja, virtuellen Speicher anzufordern, was ich überaus praktisch finde. Nur seltsamerweise geht das nur mit malloc, nicht mit operator new.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;limits&gt;
#include &lt;memory&gt;
#include &lt;cstdlib&gt;
int main()
{
  // übersteigt die Kapatizät meines RAMs bei weitem
  const std::size_t s = std::numeric_limits&lt;std::size_t&gt;::max()/8;

  void *a = calloc(s,1);
  std::cout &lt;&lt; &quot;a&quot; &lt;&lt; std::endl;
  void *b = malloc(s);
  std::cout &lt;&lt; &quot;b&quot; &lt;&lt; std::endl;
  void *c = operator new(s);
  std::cout &lt;&lt; &quot;c&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>a
b
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
</code></pre>
<p>(Wenn ich operator new als erstes ausführe kommt immer noch ein bad_alloc.)</p>
<p>Hat jemand eine Idee, warum das so ist? Geht calloc/malloc nur zufällig oder wird das auch auf anderen Plattformen laufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2345960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345960</guid><dc:creator><![CDATA[calle]]></dc:creator><pubDate>Wed, 14 Aug 2013 22:36:03 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Speicher von operator new()? on Wed, 14 Aug 2013 22:48:25 GMT]]></title><description><![CDATA[<p>Du wirst wahrscheinlich feststellen, dass a und b Nullzeiger sind. calloc und malloc werfen halt nur keine Exception.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2345962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345962</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Wed, 14 Aug 2013 22:48:25 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Speicher von operator new()? on Wed, 14 Aug 2013 23:45:50 GMT]]></title><description><![CDATA[<p>Ja stimmt, da habe ich nicht richtig hingeschaut.</p>
<p>Seltsam ist, dass ich auf meinem 32-Bit-Linux so bis 3 GB allokieren kann, auf meinem 64-Bit-Linux mit gleich viel RAM nicht.</p>
<p>Weiss jemand, wie ich virtuellen Memory allokieren kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2345966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345966</guid><dc:creator><![CDATA[calle]]></dc:creator><pubDate>Wed, 14 Aug 2013 23:45:50 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Speicher von operator new()? on Thu, 15 Aug 2013 00:04:08 GMT]]></title><description><![CDATA[<p>calle schrieb:</p>
<blockquote>
<p>Seltsam ist, dass ich auf meinem 32-Bit-Linux so bis 3 GB allokieren kann, auf meinem 64-Bit-Linux mit gleich viel RAM nicht.</p>
</blockquote>
<p>Zeig mal genau dein Programm.</p>
<blockquote>
<p>Weiss jemand, wie ich virtuellen Memory allokieren kann?</p>
</blockquote>
<p>Nur damit wir uns richtig verstehen: Was meinst du mit virtuellem Memory, den man allokieren kann?<br />
Meinst du einfach Speicher, der wer weiß wohin gemapped ist, potentiell auch eine Festplatte? Das ist ohnehin das ganz normale Vorgehen, also das, was du schon die ganze Zeit machst mit malloc/new.</p>
<p>Oder meinst du mehr Speicher anzufordern, als der Speichermanager überhaupt zur Verfügung hat und sobald man ihn trotzdem benutzt, gibt es eine Page Fault?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2345967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2345967</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 15 Aug 2013 00:04:08 GMT</pubDate></item></channel></rss>