Malloc aus DLL ausführen



  • Hallo.
    Ich möchte in einer DLL mit Malloc Speicher holen. Die DLL ist MultiThreaded-DLL. Das ganze klappt auch wunderbar nur der Speicher wird in die Auslagerungsdatei von Windows gelegt. Ich sehe das daran, dass im TaskManager der Physikalische Speicher nahezu konstant bleibt jedoch die Auslagerungsdatei sich immer um meinen Malloc Wert verändert.
    Es muss doch eine Möglichkeit geben aus einer DLL heraus physikalischen Speicher mit Malloc zu bekommen?

    Danke



  • Normalerweise solltest die physikalischen Speicher bekommen. Da Windows nur nicht benutzte Daten in die Swap-Datei legt oder wenn der Speicher zu Enden geht.

    Aber um dies sicherzustellen solltest du die Funktion
    VirtualAlloc mit MEM_PHYSICAL aufrufen



  • Unglaublich, worüber sich Leute den Kopf zerbrechen.



  • Dieser Thread wurde von Moderator/in davie aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Oder ist dein pyhsikalischer RAM schon voll, dass du zwar Speicher im RAM bekommst, aber gleichzeitig Windows eben anderes Zeug in der Auslagerungsdatei verschiebt 🤡



  • Nimm doch einfach malloc und lass es Windows auslagern. Sobald du auf den Speicher zugreifst, reserviert Windows automatisch echten RAM.
    Was erhoffst du dir davon, wenn du dem Speichermanagement von Windows in die Quere kommst?



  • danke für die Antworten.
    Das VirtualAlloc macht irgendwie zicken wenn ich da was reinschreiben will aber ich schau da gleich nochmal genauer rein.
    Ne, mein Ram ist nicht voll und es soll in den Physikalischen rein weils da einfach schneller ist.
    Ich hab normalen malloc aber irgendwie macht der das immer als Auslagerundsdatei.

    Danke



  • Gast3437 schrieb:

    Ne, mein Ram ist nicht voll und es soll in den Physikalischen rein weils da einfach schneller ist.

    Das ist ein Trugschluss. Wenn du Windows dazwischenpfuschst, indem du das Auslagern eines Speicherblockes verhinderst, wird Windows häufig langsamer, weil eben andere, häufiger gebrauchte Teile ausgelagert werden müssen.
    Wenn der Speicher noch nicht voll ist, wird malloc sofort physikalischen Speicher bekommen, egal was der Taskmanager anzeigt (der zählt außerdem manchmal verschiedene Werte zu einem zusammen). Du darfst den Anzeigen des Taskmanagers nicht blind trauen.

    Außerdem: Sobald du auch nur das erste Mal auf den Block zugreifst (und der Block nicht zu groß ist), liegt er spätestens dann komplett im physikalischen RAM. Geschwindigkeitsverlust hast du dadurch keinen.

    Also: Pfusch Windows nicht bei der Speicherverwaltung dazwischen, malloc liefert einen funktionierenden, schnellen Speicherblock und gut ist. 🙂



  • danke.
    könnte auch vielleicht daran liegen dass der malloc bereich bei mir momentan nur 1kb enthält.
    Ist aber schon merkwürdig, dass er bei malloc aus der exe auch den "physikalischen verbleibenden speicher" verringert.

    Aber solange ich kein Geschwindigkeitsverlust habe ist mir das egal 🙂
    MfG


Log in to reply