malloc und Windows paging



  • Mich würde mal interessieren wie genau malloc eigentlich Speicher reserviert. Nehmen wir mal an ich allokier mir einen Block mit 2 MB und schreib irgendwas rein. Der Block müsste dann am Stück im RAM liegen oder?

    Was passiert nun wenn Windows das swappen anfängt? Landet dann der gesamte Block auch am Stück im virtuellen Speicher oder wird der fragmentiert? Was passiert, wenn ich mit Pointern direkt auf den Speicher zugreife? Und die eigentlich wichtige Frage: Gibt es eine Möglichkeit Windows zu sagen das es einen allokierten Speicher nicht auslagern darf?



  • Es werden immer einzelne Seiten auf die Platte ausgelagert.
    (Also nicht zwingend 2MB auf einmal!)
    Greifst du auf eine der Seiten zu, die gerade ausgelagert sind,
    (egal ob über Pointer oder direkt) dann wird dein Prozess erstmal auf
    Eis gelegt und die Seite zurück in den RAM geholt.
    Ich kenne keine Möglichkeit das Auslagern direkt zu verbieten.
    Wenn du aber ab und zu auf den Speicher zugreifst, sollte dieser nicht
    ausgelagert werden.

    Viele Grüße
    Fischi



  • Hm stimmt ich hab es gerade nochmal nachgelesen. Die einzige Möglichkeit das swappen zu verhindern ist eine eigene Speicherverwaltung zu schreiben. Trotzdem danke.



  • asdrubael schrieb:

    Hm stimmt ich hab es gerade nochmal nachgelesen. Die einzige Möglichkeit das swappen zu verhindern ist eine eigene Speicherverwaltung zu schreiben. Trotzdem danke.

    Deine Speicherverwaltung müsste dann aber die von Windows ersetzen 😉

    Swappen ist aber nicht so ein großes Problem. Weil moderne OS ziemlich intelligent sind...

    Erklär mal was du genau machen willst, dann kann man sicher eine Methode finden die effizient ist. zB ist streaming oft eine gute Alternative zu viel Speicher allokieren.



  • Ich brauche non-paged Speicher, weil ich von einem Framegrabber in einen Buffer grabbe und es nicht vorkommen darf, dass eine Aufnahme mal doppelt so lang dauert, weil er den Speicher erst wieder von der lahmen Platte in´s RAM schaufeln muss. Mit Tricksereien oder Gottvertrauen ist es leider nicht getan.

    Läuft wahrscheinlich darauf hinaus das der Speicher auf der VGA Karte liegt und nur bei Bedarf auf den Host kopiert wird.


Anmelden zum Antworten