<?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[Speicherverbrauch auslesen]]></title><description><![CDATA[<p>Hallo !</p>
<p>Ich suche verzweifelt nach eine Möglichkeit, wie man den Speicherverbrauch (RAM) auslesen kann, damit ich mein Programm darauf testen kann.<br />
Also im Grunde sowas wie WindowsTastManager-&gt;getMemoryUsage zu Beginn und dann wieder zu Ende, um den realen Verbrauch zu haben...</p>
<p>Kennt jemand eine Möglichkeit?</p>
<p>Vielen Dank!<br />
Jerome</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/175358/speicherverbrauch-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 10:49:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175358.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Mar 2007 15:04:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherverbrauch auslesen on Fri, 09 Mar 2007 15:04:19 GMT]]></title><description><![CDATA[<p>Hallo !</p>
<p>Ich suche verzweifelt nach eine Möglichkeit, wie man den Speicherverbrauch (RAM) auslesen kann, damit ich mein Programm darauf testen kann.<br />
Also im Grunde sowas wie WindowsTastManager-&gt;getMemoryUsage zu Beginn und dann wieder zu Ende, um den realen Verbrauch zu haben...</p>
<p>Kennt jemand eine Möglichkeit?</p>
<p>Vielen Dank!<br />
Jerome</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1242357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1242357</guid><dc:creator><![CDATA[jerry82]]></dc:creator><pubDate>Fri, 09 Mar 2007 15:04:19 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverbrauch auslesen on Fri, 09 Mar 2007 15:09:45 GMT]]></title><description><![CDATA[<p>ueberlade das globale new delete und delete[] und zaehl einfach mit, auf diese weise kannst du nicht nur start und endverbrauch ermitteln, sondern koenntest sogar durchgaengig bei jedem aufruf eine statistik loggen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1242361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1242361</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Fri, 09 Mar 2007 15:09:45 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverbrauch auslesen on Thu, 15 Mar 2007 21:47:04 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Vielen Dank für Deine Antwort! Ich weiss zwar, was überladen ist, aber bin leider noch kein C++-Profi. Kannst Du mir vielleicht an einem kurzen Code-Beispiel sagen, wie ich dadurch den Speicherverbrauch auslesen könnte?</p>
<p>Ich habe eine andere Möglichkeit gefunden, Infos zum Speicher zu bekommen:<br />
Es gibt die PrintMemoryInfo-Funktion von der Microsoft Platform SDK<br />
<a href="http://msdn2.microsoft.com/en-us/library/ms683219.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms683219.aspx</a></p>
<p>Leider klappt das Code-Beispiel auf meinem Rechner nicht, obwohl ich die psapi.h und die psapi.lib im projekt eingebunden hab (kommen trotzdem noch Linkerfehler...)</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;stdio.h&gt;
#include &quot;psapi.h&quot;

void PrintMemoryInfo( DWORD processID )
{
    HANDLE hProcess;
    PROCESS_MEMORY_COUNTERS pmc;

    // Print the process identifier.

    printf( &quot;\nProcess ID: %u\n&quot;, processID );

    // Print information about the memory usage of the process.

    hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION |
                                    PROCESS_VM_READ,
                                    FALSE, processID );
    if (NULL == hProcess)
        return;

    if ( GetProcessMemoryInfo( hProcess, &amp;pmc, sizeof(pmc)) )
    {
        printf( &quot;\tPageFaultCount: 0x%08X\n&quot;, pmc.PageFaultCount );
        printf( &quot;\tPeakWorkingSetSize: 0x%08X\n&quot;,
                  pmc.PeakWorkingSetSize );
        printf( &quot;\tWorkingSetSize: 0x%08X\n&quot;, pmc.WorkingSetSize );
        printf( &quot;\tQuotaPeakPagedPoolUsage: 0x%08X\n&quot;,
                  pmc.QuotaPeakPagedPoolUsage );
        printf( &quot;\tQuotaPagedPoolUsage: 0x%08X\n&quot;,
                  pmc.QuotaPagedPoolUsage );
        printf( &quot;\tQuotaPeakNonPagedPoolUsage: 0x%08X\n&quot;,
                  pmc.QuotaPeakNonPagedPoolUsage );
        printf( &quot;\tQuotaNonPagedPoolUsage: 0x%08X\n&quot;,
                  pmc.QuotaNonPagedPoolUsage );
        printf( &quot;\tPagefileUsage: 0x%08X\n&quot;, pmc.PagefileUsage );
        printf( &quot;\tPeakPagefileUsage: 0x%08X\n&quot;,
                  pmc.PeakPagefileUsage );
    }

    CloseHandle( hProcess );
}

void main( )
{
    // Get the list of process identifiers.

    DWORD aProcesses[1024], cbNeeded, cProcesses;
    unsigned int i;

    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &amp;cbNeeded ) )
        return;

    // Calculate how many process identifiers were returned.

    cProcesses = cbNeeded / sizeof(DWORD);

    // Print the memory usage for each process

    for ( i = 0; i &lt; cProcesses; i++ )
        PrintMemoryInfo( aProcesses[i] );
}
</code></pre>
<p>Hat jemand vielleicht schonmal damit gearbeitet und könnte mir helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246370</guid><dc:creator><![CDATA[jerry82]]></dc:creator><pubDate>Thu, 15 Mar 2007 21:47:04 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverbrauch auslesen on Fri, 16 Mar 2007 05:45:54 GMT]]></title><description><![CDATA[<p>wie kann man global den new /delete operator überladen...</p>
<p>muss ja für alle Klassen gelten und funktionieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246415</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Fri, 16 Mar 2007 05:45:54 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverbrauch auslesen on Fri, 16 Mar 2007 06:19:27 GMT]]></title><description><![CDATA[<p>um für alle klassen den new und delete operator zu überladen würde ich mir eine eigene Basisklasse ableiten</p>
<p>sowas wie</p>
<pre><code class="language-cpp">AClass
{
    virtual public AClass()
    {
        static int memusage += sizeof(AClass);
    }

    virtual public  ~AClass()
    {
        memusage -= sizeof(AClass);
    }
}
</code></pre>
<p>und jede klasse von dieser klasse ableiten und den basis constructor bzw destructor auf alle Fälle auch bei überladung aufrufen. die frage ist ob das mit sizeof klappt. Da müsste mal jemand einen tipp geben wie man bei abgeleiteten klassen die richtige größe bekommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246426</guid><dc:creator><![CDATA[Fedaykin]]></dc:creator><pubDate>Fri, 16 Mar 2007 06:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverbrauch auslesen on Fri, 16 Mar 2007 06:32:07 GMT]]></title><description><![CDATA[<p>mhh hab das auch mal getestet ...</p>
<p>mit sizeof geht es ... aber es gibt nur ein Problem:</p>
<p>pointer auf arrays sind immer 4bytes gross, obwohl das array 1000 bytes gross sein könnte, und in einer Klasse wird man spätestens durch zeichenketten auf arrays mit einfachen pointer stossen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246428</guid><dc:creator><![CDATA[LinkeT]]></dc:creator><pubDate>Fri, 16 Mar 2007 06:32:07 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverbrauch auslesen on Fri, 16 Mar 2007 08:14:30 GMT]]></title><description><![CDATA[<p>Wie wärs stattdessen, wenn man für eine Basisklasse den op new überläd und dann immer von dieser ableitet:</p>
<pre><code class="language-cpp">class Base
{
    static std::size_t memCount_;
public:
    static void* operator new(std::size_t size)
    {
        memCount_ += size;
        return ::operator new(size);
    }

    static void operator delete(void* p, std::size_t size)
    {
        memCount_ -= size;
        ::operator delete(p, size);
    }
    //analog für new[] und delete[]
};
</code></pre>
<p>Alexandrescu schreibt schon sinngemäß: &quot;wenn die Compilerbauer so viel Aufwand betreiben, dem operator new die Größe bereitzustellen, waurm sollte das nicht nutzen?&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Edit: Op delete hinzugefügt.</p>
<p>Edit2: Eventuell einen virtuellen Destruktor hinzufügen, falls man Polymorphismus betreiben will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246463</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Fri, 16 Mar 2007 08:14:30 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverbrauch auslesen on Fri, 16 Mar 2007 08:16:31 GMT]]></title><description><![CDATA[<p>Ja, das wäre sicher eine Lösung, allerdings bekommt der &quot;normale&quot; op delete die Größenangabe nicht explizit mitgeteilt, sondern muß sie selber wissen (und um aus dem übergebenen Zeiger abzulesen, wie groß der Speicherblock dahinter ist, mußt du weit in die Tiefen der Heap-Verwaltung abtauchen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246467</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 16 Mar 2007 08:16:31 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverbrauch auslesen on Fri, 16 Mar 2007 08:26:20 GMT]]></title><description><![CDATA[<p>Dann wundert es mich, dass Alexandrescus SmallObjectAllocator funktioniert :o</p>
<p>Im Standard steht:</p>
<blockquote>
<p>A deallocation function can have more than one parameter. [...]<br />
If class T does not declare such an operator delete (mit einem Parameter) but does declare a member deallocation function named operator delete with exactly two parameters, the second of which has type std::size_t, then this funtion is a usual deallocation function.</p>
</blockquote>
<p>Nach dem ersten Absatz hätte ich gesagt, dass das zumindest in der Praxis portierbar ist. Nach dem zweiten Absatz, scheint mir das Standard zu sein.</p>
<p>PS: Ich sollte mir mal eine Version vom Standard besorgen, die nicht kopiergeschützt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246473</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Fri, 16 Mar 2007 08:26:20 GMT</pubDate></item></channel></rss>