Anfängerfrage: malloc liefert NULL, obwohl Arbeitsspeicher vorhanen ist



  • Hallo Leute,

    ich habe ein Verständnisproblem.

    Mein Speichertool Everest zeigt mir an, dass ich 2500 MB Arbeitsspeicher frei habe.
    Nun reserverie ich mit malloc 1150 MB Speicher und bekommen NULL zurück, also dass nicht genügend Speicher vorhanden ist.

    Wie ist das möglich und kann ich etwas dagegen machen?

    Vielen Dank und viele Grüße,
    Jonson



  • Bist du vielleicht im falschen Forum gelandet und wolltest evtl nach C? Naja, egal.

    Der Grund könnte sein, dass du nicht mehr genügend freien Speicher am Stück hast. Wenn du den Speicher in 5 Blöcke zu je 500 MB RAM hast, kannst du keinen Block mit 1150 MB allozieren 😉


  • Mod

    Falls du dich nicht im Forum geirrt haben solltest und doch C++ machen willst: In C++ gibt es auch ein paar Standardcontainer die (gegen gewisse Laufzeitkosten) auch mit zerstückeltem Speicher zurecht kommen (z.B. deque). Von deiner Frage her zu urteilen, wirst du aber C++, wenn überhaupt, bestenfalls als C mit Klassen kennen und wirst einiges dazu lernen müssen, um dies zu nutzen.

    Und dann bleibt allgemein die Frage, warum man so etwas braucht. Mir ist schon klar, dass es viele Anwendungen gibt, bei denen man zwangsläufig so viel Speicher am Stück braucht. Aber erfahrungsgemäß steckt da fast immer falsches Design dahinter, wenn ein Anfänger nach so etwas fragt.



  • Es handelt sich schon um ein C++ Programm, aber mit Bestandteilen aus C.

    In dem Projekte werden tausende Messdaten von einer Hardware geliefert und müssen verarbeitet werden. Ich werde mir deque einmal genauer ansehen.

    Vielen Dank schonmal.


  • Mod

    Falls es sich um ein 32-bit Programm handelt, ist auch möglicherweise der Adressraum für diesen einen Prozess bereits erschöpft.



  • Kann ich den irgendwie erweitern?



  • Jonson86 schrieb:

    Kann ich den irgendwie erweitern?

    Nein. Du könntest dir aber überlegen wieso du so viel Speicher anlegen willst, und den Speicherverbrauch ggf. etwas optimieren. Im schlimmsten Fall müsstest du dir temporäre Dateien schreiben, in die du Daten auslagerst, die du grade nicht brauchst.
    Ich bezweifle allerdings dass du wirklich so viel Speicher benötigst. Was versuchst du zu erreichen? ( ⚠ nicht: was versuchst du zu tun. Nenne uns vor allem das Ziel, nicht nur den Weg )



  • Jonson86 schrieb:

    Kann ich den irgendwie erweitern?

    Der Vollständigkeit halber: es gibt schon Möglichkeiten (3GB Switch in der boot.ini, oder LAA-Flag unter x64), aber ich schließe mich meinen Vorrednern an. Es gibt sicher effizientere Wege für das, was du vorhast. "Tausende Messdaten" hört sich auch nicht nach sooo viel an, und üblicherweise erzeugt man aus den Daten ja Ergebnisse oder eventuell auch Zwischenergebnisse, die man speichern kann (so dass vielleicht nicht alle Daten gleichzeitig im Speicher gehalten werden müssen). Also, rede! 😉


Anmelden zum Antworten