Auslagern in virtuellen Speicher unterbinden



  • Hi Leute,

    ich hab mal eine Frage. Wie kann man es schaffen das z.B. eine bestimmte Variable nicht ausgelagert wird in den virtuellen Speicher.

    Sicher fragt ihr euch was ich damit bezwecken will. Ich muss ein vergleich machen von x tausend Daten durchführen ob sie schonmal da waren. Da die structur die ich verwende zu groß ist, will ich mir eine hilfsstruktur nehmen die weniger speicher braucht und so im schnelleren Speicher (RAM) bleiben sollte und so überprüfen soll ab dieser Datensatz schonmal da war.

    Bitte helft mir. Es ist wirklich wichtig. Dickes Danke schonmal im voraus.

    Cu,
    Torakas



  • wenn du kein virtuellen Speicher hast verwendet er auch keinen ....



  • Du kannst das dadurch unterbinden, indem Du den Speicherbereich benutzt (also liest und schreibst). 🙂

    Nur unbenutzte Bereiche werden ausgelagert.

    Aber etwas ernsthafter:

    Die Betriebssysteme bieten die Möglichkeit, Seiten im Speicher zu verriegeln - diese werden dann nicht ausgelagert. Ist aber keine nette Art, ein Programm auf einem Multitaskingsystem auf diese Weise zu betreiben und vermutlich auch eine von Dir völlig überbewertete Lösung für Dein Problem.

    Denn:
    a) wenn das System viel RAM hat, lagert es sowieso nie aus
    b) wenn das System wenig RAM hat und auslagern muß und Du verriegelst Deine Daten im RAM, so muß es ja was anderes auslagern - vielleicht Teile der Oberfläche, etc. Also machst Du andere Teile des Systems so lahm, daß Du effektiv vielleicht gar keinen Gewinn hast

    Wahrscheinlich wäre eine effiziente Datenstruktur und ein cleverer Algorithmus die beste Lösung.

    Von welchen Datenmengen sprichst Du hier eigentlich?

    Dazu müßte man natürlich nur wissen, welches OS Du verwendest (ich tippe mal auf Windows, wenn jemand nichts sagt war es bisher immer Windows).



  • Marc++us schrieb:

    Von welchen Datenmengen sprichst Du hier eigentlich?

    Dazu müßte man natürlich nur wissen, welches OS Du verwendest (ich tippe mal auf Windows, wenn jemand nichts sagt war es bisher immer Windows).

    Weiss nicht genau wieviel es sein werden bzw. ist. Es kommt halt auf den geladen Datensatz an. Denke aber das es locker 100-200 MB annimmt und die werden x mal in einer Schleife durchsucht wird auf doppelte einträge bevor es der liste hinzugefügt wird.

    Desweitern ist das Programm sehr Speicher hungrig. Die eine Variable braucht schon vielleicht mal 200 MB. Aber ich rufe noch daten von einem Server ab und wenn er mal einen Datensatz geladen hat, dann hat der vielleicht schon ca 500-1GB im RAM. Es kommt halt auf den Datensatz an. Ich hab hier einen Datensatz mit dem ich jeden PC in die knie bekomme. Der braucht locker >4GB im RAM.

    Zu der Frage welches OS ich verwende. Nun, die entwicklungplattform ist Windows, kann aber jederzeit auf Unix/Linux/Mac kompiliert werden (QT von Trolltech).

    Ich hab jetzt einfach die Überprüfung ob der Eintrag schon vorhanden ist rausgenommen bzw eine eine Dialogabfrage die fragt ob sie ausgeführt werden soll.

    Wie auch immer ich es jetzt mache, aber vielleicht sagst mir trotzdem wie man die Auslagerung sperren koennte wenn es nicht zu schwer ist.

    Cu,
    Torakas



  • Torakas schrieb:

    Der braucht locker >4GB im RAM.

    Also mein Rechner kann maximal 4GB RAM haben (physikalischer inkl. virtueller Speicher). Das ist bei 32Bit-Systemen nunmal die Obergrenze.

    Entweder hast du einen 64Bit-Rechner oder du solltest wirklich mal deinen Algorithmus überdenken.

    DivX brauchst ja auch keine 7GB RAM-Speicher, obwohl eine DVD so groß ist. 😃



  • Torakas schrieb:

    Weiss nicht genau wieviel es sein werden bzw. ist. Es kommt halt auf den geladen Datensatz an. Denke aber das es locker 100-200 MB annimmt und die werden x mal in einer Schleife durchsucht wird auf doppelte einträge bevor es der liste hinzugefügt wird.

    denk nicht dran, so viele daten ins ram zu zwingen.
    aber überleg dir gut, ob man wirklich x mal in einer schleife durchsuchen muß.
    muß man nämlich bestimmt nicht.


Anmelden zum Antworten