<?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[Klasse instanziieren mit malloc]]></title><description><![CDATA[<p>Ist es möglich, mit malloc eine Klasse zu instanziieren? Wie verhält sich der Einsatz von new generell zu malloc? Ich habe in einem anderen Beitrag erfahren, dass delete den Speicher nicht mehr ans Betriebssystem freigibt, sondern lediglich ans Programm. Da ich von C auf C++ umsteige, stört mich das etwas. Wie geht ihr mit dieser Tatsache (?) um?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180563/klasse-instanziieren-mit-malloc</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 20:33:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180563.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 May 2007 07:33:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse instanziieren mit malloc on Fri, 04 May 2007 07:33:18 GMT]]></title><description><![CDATA[<p>Ist es möglich, mit malloc eine Klasse zu instanziieren? Wie verhält sich der Einsatz von new generell zu malloc? Ich habe in einem anderen Beitrag erfahren, dass delete den Speicher nicht mehr ans Betriebssystem freigibt, sondern lediglich ans Programm. Da ich von C auf C++ umsteige, stört mich das etwas. Wie geht ihr mit dieser Tatsache (?) um?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278542</guid><dc:creator><![CDATA[Saraneus]]></dc:creator><pubDate>Fri, 04 May 2007 07:33:18 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse instanziieren mit malloc on Fri, 04 May 2007 07:38:49 GMT]]></title><description><![CDATA[<p>malloc() solltest du wirklich nur verwenden, wenn du mit POD-Objekten zu tun hast (&quot;Plain Old Data&quot; - d.h. im wesentlichen C-Style structs). Bei echten C++ Klassen hat malloc() das Problem, daß es keine Konstruktoren kennt - damit holst du dir nicht-initialisierte Speicherblöcke, die du dann als Objekt anzusprechen versuchst. (und was bei diesem Versuch herauskommt, kann dir niemand garantieren)</p>
<p>PS: Und in der Regel basiert die new/delete Speicherverwaltung intern auch wieder auf malloc/free - damit erübrigt sich das Thema, wer denn nun den Speicher zurückbekommt.<br />
(und spätestens wenn das Programm beendet wird, holt sich das Betriebssystem den Speicher zurück)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278544</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 04 May 2007 07:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse instanziieren mit malloc on Fri, 04 May 2007 07:41:35 GMT]]></title><description><![CDATA[<p>Saraneus schrieb:</p>
<blockquote>
<p>Ist es möglich, mit malloc eine Klasse zu instanziieren?</p>
</blockquote>
<p>Nein. malloc ruft keine ctors auf.</p>
<p>Saraneus schrieb:</p>
<blockquote>
<p>Wie verhält sich der Einsatz von new generell zu malloc?</p>
</blockquote>
<p>In C nimmst du <em>malloc</em>, in C++ <em>new</em> bzw <em>new[ ]</em></p>
<p>Saraneus schrieb:</p>
<blockquote>
<p>Ich habe in einem anderen Beitrag erfahren, dass delete den Speicher nicht mehr ans Betriebssystem freigibt, sondern lediglich ans Programm.</p>
</blockquote>
<p><em>Wo</em> willst du <em>was</em> erfahren haben!?</p>
<p>greetz, Swordfish</p>
<p>[edit]zu spät *argl*[/edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278546</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 04 May 2007 07:41:35 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse instanziieren mit malloc on Fri, 04 May 2007 07:55:32 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Und in der Regel basiert die new/delete Speicherverwaltung intern auch wieder auf malloc/free - damit erübrigt sich das Thema, wer denn nun den Speicher zurückbekommt.</p>
</blockquote>
<p>Kann man dieses Verhalten beim Kompilieren (mit Compileroptionen) beeinflussen? Denn new/delete gibt Speicher laut &quot;top&quot; definitiv nicht mehr ans System zurück, allenfalls ans Programm. Wenn ich mit malloc/free arbeite, kann ich live sehen, wie Speicher ans System zurückgegeben wird.</p>
<p>Swordfish schrieb:</p>
<blockquote>
<p>Wo willst du was erfahren haben!?</p>
</blockquote>
<p>Wo: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-180533.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-180533.html</a><br />
Was: siehe letzten Beitrag:</p>
<p>Mr. N schrieb:</p>
<blockquote>
<p>Saraneus schrieb:</p>
<blockquote>
<p>Folgende Version funktioniert aber, d.h. &quot;top&quot; spuckt beim Speicherverbrauch immer 0.1% aus.</p>
<pre><code class="language-cpp">IrgendeineKlasse *instanz;
while(1) {
    instanz = new IrgendeineKlasse(0);
    delete instanz;
}
</code></pre>
</blockquote>
<p>Weil er ja das gelöschte wiederverwenden kann. Es <strong>wird</strong> freigegeben, allerdings nur innerhalb des Programms.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1278552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278552</guid><dc:creator><![CDATA[Saraneus]]></dc:creator><pubDate>Fri, 04 May 2007 07:55:32 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse instanziieren mit malloc on Fri, 04 May 2007 08:04:37 GMT]]></title><description><![CDATA[<p>Da Du mit top arbeitest nutzt Du vermutlich Linux. Hier greifen die operatoren new und delete definitiv auf malloc und free zurück, was man auch in Stacktraces des Debuggers gdb sehen kann. Beide sollten sich also nicht grundsätzlich anders verhalten.</p>
<p>Ansonsten würde ich an Deiner Stelle dort mehr dem Betriebssystem bzw. der Speicherverwaltung der C(++)-Bibliothek vertrauen. &lt;edit&gt;Gründe dafür führt Simon2 unten auf&lt;/edit&gt;. Sollte es wirklich stichhaltige Gründe geben, new und delete mittels malloc und free nachbauen zu müssen, kannst Du IMHO gleich die ganze Bibliothek wegschmeissen. Kann ich mir wie gesagt aber nicht vorstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278555</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 04 May 2007 08:04:37 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse instanziieren mit malloc on Fri, 04 May 2007 08:02:37 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich glaube, das hat nicht unbedingt etwas mit der Programmiersprache zu tun, sondern entweder mit der konkreten Runtimelib oder (wahrscheinlicher) mit dem Betriebssystem; das entscheident ziemlich autonom, wann es wie Speicher wieder für andere Anwendungen freigibt.<br />
Da spielen dann u.A. mit rein, wieviel Speicher insgesamt noch frei ist, was das OS denkt, wer den Speicher demnächst brauchen könnte, etc. ...<br />
Üblicherweise werden Betriebssystem aktiver, sobald der Speicher knapp wird und nicht vorher (kostet nur unnötig Performance).<br />
Du hast als User nicht allzuviele Möglichkeiten .... brauchst es aber auch einfach nicht !</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278556</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 04 May 2007 08:02:37 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse instanziieren mit malloc on Fri, 04 May 2007 08:13:22 GMT]]></title><description><![CDATA[<p>Saraneus schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Und in der Regel basiert die new/delete Speicherverwaltung intern auch wieder auf malloc/free - damit erübrigt sich das Thema, wer denn nun den Speicher zurückbekommt.</p>
</blockquote>
<p>Kann man dieses Verhalten beim Kompilieren (mit Compileroptionen) beeinflussen? Denn new/delete gibt Speicher laut &quot;top&quot; definitiv nicht mehr ans System zurück, allenfalls ans Programm. Wenn ich mit malloc/free arbeite, kann ich live sehen, wie Speicher ans System zurückgegeben wird.</p>
</blockquote>
<p>Wenn du unbedingt dem System ins Handwerk pfuschen willst, kannst du gerne 'operator new' und 'operator delete' überschreiben, um deine eigene Speicherverwaltung einzubauen. Aber wie Simon und LordJaxom schon sagten, weiß dein System vermutlich besser als du, wann es mehr Speicher anfordern sollte.</p>
<blockquote>
<p>Swordfish schrieb:</p>
<blockquote>
<p>Wo willst du was erfahren haben!?</p>
</blockquote>
<p>Wo: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-180533.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-180533.html</a><br />
Was: siehe letzten Beitrag:</p>
<p>Mr. N schrieb:</p>
<blockquote>
<p>Saraneus schrieb:</p>
<blockquote>
<p>Folgende Version funktioniert aber, d.h. &quot;top&quot; spuckt beim Speicherverbrauch immer 0.1% aus.</p>
<pre><code class="language-cpp">IrgendeineKlasse *instanz;
while(1) {
    instanz = new IrgendeineKlasse(0);
    delete instanz;
}
</code></pre>
</blockquote>
<p>Weil er ja das gelöschte wiederverwenden kann. Es <strong>wird</strong> freigegeben, allerdings nur innerhalb des Programms.</p>
</blockquote>
</blockquote>
<p>Das hat doch auch seine Vorteile - andere Programme brauchen den Speicher im Moment eh nicht (wenn doch, wird das System dem Heap-Manger schon auf die Schultern klopfen) und solange der Heap-Manager genug Reserven für deine Anforderungen hat, muß er das System nicht um neue Zuteilungen bitten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278566</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 04 May 2007 08:13:22 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse instanziieren mit malloc on Fri, 04 May 2007 09:28:49 GMT]]></title><description><![CDATA[<p>Einfache Regel: Nimm kein malloc/free in C++. Denk dran. C++ ist eine eigene Programmiersprache und keine neue Version von C. Was in C gut war, ist in C++ schlecht etc.</p>
<p>Wenn du C++ lernen willst, dann vergiss C.</p>
<p>Saraneus schrieb:</p>
<blockquote>
<p>Swordfish schrieb:</p>
<blockquote>
<p>Wo willst du was erfahren haben!?</p>
</blockquote>
<p>Wo: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-180533.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-180533.html</a><br />
Was: siehe letzten Beitrag:</p>
<p>Mr. N schrieb:</p>
<blockquote>
<p>Saraneus schrieb:</p>
<blockquote>
<p>Folgende Version funktioniert aber, d.h. &quot;top&quot; spuckt beim Speicherverbrauch immer 0.1% aus.</p>
<pre><code class="language-cpp">IrgendeineKlasse *instanz;
while(1) {
    instanz = new IrgendeineKlasse(0);
    delete instanz;
}
</code></pre>
</blockquote>
<p>Weil er ja das gelöschte wiederverwenden kann. Es <strong>wird</strong> freigegeben, allerdings nur innerhalb des Programms.</p>
</blockquote>
</blockquote>
<p>Das macht ja nichts. Du darfst reservierten Speicher eben nicht als feste Page im RAM ansehen. Dafür gibt es ja Paging...</p>
<p>(btw. gilt das gleiche für malloc/free)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278624</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 04 May 2007 09:28:49 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse instanziieren mit malloc on Fri, 04 May 2007 11:59:07 GMT]]></title><description><![CDATA[<p>Saraneus schrieb:</p>
<blockquote>
<p>Ist es möglich, mit malloc eine Klasse zu instanziieren? Wie verhält sich der Einsatz von new generell zu malloc? Ich habe in einem anderen Beitrag erfahren, dass delete den Speicher nicht mehr ans Betriebssystem freigibt, sondern lediglich ans Programm. Da ich von C auf C++ umsteige, stört mich das etwas. Wie geht ihr mit dieser Tatsache (?) um?</p>
</blockquote>
<p>Bei malloc ist das genauso.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278733</guid><dc:creator><![CDATA[Mr. N at work]]></dc:creator><pubDate>Fri, 04 May 2007 11:59:07 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse instanziieren mit malloc on Fri, 04 May 2007 12:03:28 GMT]]></title><description><![CDATA[<p>Allerdings kein Grund, eine Antwort schuldig zu bleiben:</p>
<pre><code class="language-cpp">MyClass *p = malloc(sizeof(MyClass));

new (p) MyClass; // &lt;- hier wird der Konstruktor aufgerufen, trickreich, trickreich

...

p-&gt;~MyClass();
free(p);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1278739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278739</guid><dc:creator><![CDATA[Mr. N at work]]></dc:creator><pubDate>Fri, 04 May 2007 12:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse instanziieren mit malloc on Fri, 04 May 2007 15:07:42 GMT]]></title><description><![CDATA[<p>Mr. N at work schrieb:</p>
<blockquote>
<pre><code class="language-cpp">MyClass *p = malloc(sizeof(MyClass));

new (p) MyClass; // &lt;- hier wird der Konstruktor aufgerufen, trickreich, trickreich
</code></pre>
</blockquote>
<p>Ja, aber eben nicht per 'malloc'. Wahr ist hier natürlich, dass man Allokation von Instanzierung entkoppelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278862</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 04 May 2007 15:07:42 GMT</pubDate></item></channel></rss>