Freien Hauptspeicher abfragen, nach Anlegen einiger Zeiger



  • Oh, ich fürchte, Du hast recht. Aber den Rest werde ich dann wohl hinbekommen. Jedenfalls vielen Dank für die Hilfe!



  • Hallo noch mal...
    Was mir erst nicht aufgefallen war ist, dass "static.dwTotalPhys" mir den gesamten Speicher, nicht den freien Speicher anzeigt. Der Speicher variiert auch nicht. Gar nicht... .

    Nur bei "status.dwAvailPhys" zeigt er mir einen Wert an, der hinkommen könnte. Allerdings variiert dieser auch nicht.



  • Post mal den code!
    Dann siehts man am besten wo der fehler ist 😉



  • Alex77 schrieb:

    Tipps?

    Ja, besorg Dir einen Speicher-Profiler und lass den das machen, dafür sind die Dinger schließlich da. 😉



  • #include <windows.h> 
    #include <iostream> 
    using namespace std;
    int main() 
    { 
        MEMORYSTATUS status, status2; 
        GlobalMemoryStatus( &status ); 
    
        std::cout << "Freier Speicher (in mb): " << status.dwAvailPhys <<"\n"; 
        int *y = new int;
        *y=10;
        GlobalMemoryStatus( &status2 );    
        std::cout << "Freier Speicher (in mb): " << status.dwTotalVirtual;
        cin.get();
    }
    


  • Lies mal nochmal meinen post bezüglich der große des anzuforderten speichers!
    Ein int hat 4 byte (normalerweise) 4byte von ich nehm mal an 512 oder 1024 MegaByte also grop über den Daumen 100.000.000mal so viel. Da ists klar das der unterschied nicht da ist.



  • @nman: Also mit massif müsste ich das dann wohl erreichen. Leider scheint es das Tool nur für Linux zu geben.
    Hatte zuvor noch nie von solchen Tools gehört... . Werde dann wohl mal googeln. Außer, Du hast ein Tool für Windows parat?



  • @Storm.Xapek.de:
    Hast ja recht. Allerdings habe ich im Gegensatz zu Deinem Code jeweils das Teilen von "/1024 / 1024" rausgenommen. Sah mir nun nach Bytes aus. Kann mich natürlich irren.



  • Nochmal du musst die Sache anders angehen.
    Entweder du ermittelst den verbrauch deines test-prozesses.
    Oder du machst den speicher den du anforderst entsprechend groß sodass er ins gewicht fällt.

    Mit der ausgabe hat das nichts zu tun, ob es jetzt MB oder byte sind, es kommt drauf an was man besser lesen kann (PS: der code war nicht von mir)

    int *specher = new int[1000000]; //8MB speicher wenn ich richtig gerechnet hab
    

    so inetwa würd ich sagen, dann merkst du vll. auch einen unterschied.



  • Tatsache, musste wirklich nur groß genug sein! Danke!

    #include <windows.h> 
    #include <iostream> 
    using namespace std;
    int main() 
    { 
        MEMORYSTATUS status; 
        GlobalMemoryStatus( &status ); 
        std::cout << "Freier Speicher (in mb): " << status.dwAvailVirtual <<"\n"; 
        int *test = new int[1000000]; //8MB speicher wenn ich richtig gerechnet hab
        GlobalMemoryStatus( &status );    
        std::cout << "Freier Speicher (in mb): " << status.dwAvailVirtual <<"\n";
        delete []test;
        GlobalMemoryStatus( &status );    
        std::cout << "Freier Speicher (in mb): " << status.dwAvailVirtual;
    
        cin.get();
    }
    

    Ausgabe:
    2138730496
    2134728704
    2138730496



  • Ohh sind nur 4MB,mein Fehler ein int hat 4byte weis auch nciht wie cih auf 8 gekommen bin 🙄
    Hauptsache dein programm läuft 😉



  • Alex77 schrieb:

    Außer, Du hast ein Tool für Windows parat?

    Nein, sorry, ich habe kein Windows, keine Ahnung, was man da verwendet.



  • Die Speicherverwaltung in deiner Standardbibliothek fordert immer einen größeren Block vom Betriebssystem an und teilt dir dann davon zu, da Speicheranforderung recht teuer ist.
    Daher musst du (wie du auch festgestellt hast) einen größeren Block anfordern, der die Speicherverwaltung zwing vom Betriebssystem neuen Speicher anzufordern.

    Um den Speicherverbrauch festzuhalten verwende ich die Debug-Helfer von meiner VC-CRT.



  • @Any: Verstehe leider immer noch nicht, warum der Compiler einen größeren Speicherblock reserviert. Näheres würde mich aber doch interessieren. Worunter muss ich da googeln, oder könntest Du mir das noch einmal näher erklären?

    Bedeutet "teuer" hier, dass es viel Rechenzeit kostet? ..und dadurch ähnlich einem Vektor einfach lieber gleich mehr Speicher reserviert wird, der dann kommenden Zeigern zugute kommt?



  • Ja läuft auf das gleiche hinaus.



  • Ja, vielen Dank Euch allen. Habt mir sehr geholfen.


Anmelden zum Antworten