Speicheranfoderungen im Heap



  • Hi,

    ich bräuchte einen Tip, wie ich sicherstellen, bzw abfragen kann, ob ein gerade allocierter Speicher sich im Ram oder in der Auslagerungsdatei befindet.

    Ich muss Bilder von einer Kamera einlesen. Dazu werden vorher Bildcontainer(Klasse mit x-y Ausdehung, Zeiger auf unsigned char * Buffer usw) erzeugt.
    Die Bilder werden schnell getriggert hintereinander eingelesen, so dass ich sicherstellen muss, dass alle Container im Speicher direkt liegen. Hd Zugriffe würden das Zeitmanagement zerstören.
    Es können durchaus mal 500MB+ sein.

    Es arbeiten zur gleichen Zeit keine Anderen Programme(bis auf die grundlegenden Windowsdienste etc) nebenher. Es wird kein anderes Programm oder ähnliches gestartet.

    fg T



  • tamasi schrieb:

    Hi,

    ich bräuchte einen Tip, wie ich sicherstellen, bzw abfragen kann, ob ein gerade allocierter Speicher sich im Ram oder in der Auslagerungsdatei befindet.

    Mit Standardmitteln vermutlich gar nicht. Ansonsten mit betriebssystemspezifischen Funktionen allokieren und ein Auslagern verbieten.
    http://msdn.microsoft.com/en-us/library/aa366779(VS.85).aspx

    tamasi schrieb:

    Es arbeiten zur gleichen Zeit keine Anderen Programme(bis auf die grundlegenden Windowsdienste etc) nebenher. Es wird kein anderes Programm oder ähnliches gestartet.

    fg T

    Bei genügend RAM wird vermutlich nix ausgelagert werden, wozu auch?

    MFG



  • Es gibt auch eine Gruppenrichtlinie, die Prozessen erlaubt, das Auslagern zu verhindern (bei Interesse guck mal im Gruppenrichtlinieneditor nach der genauen Bezeichnung). Vielleicht ist das ein Hinweis für dich. Ich habe erst kürzlich Probleme mit dem Treiber einer Zeilenkamera gehabt (seltsame, sporadisch auftretende Streifenbildung). Das Einrichten der Gruppenrichtlinie und das Aktivieren der Nutzung dieser im Treiber konnte den Fehler beseitigen. Wie du dann allerdings selbst das Auslagern verhindern kannst, weiß ich nicht (ein Stichwort ist wohl 'AWE', sieh mal auf msdn.com nach).



  • Vielen Dank für die Antworten.
    Mit VirtualAlloc +VirtualLock konnte ich bisher erfolgreich größere Speichermengen im Arbeitsspeicher halten.

    Bisher fand ich nirgendwo in der MSDN eine Information darüber, ob vor einem eventuellen VirtualAlloc eine Speicherbereinigung stattfindet.

    Aufgrund softwareinterner Arbeitsweisen wäre eine Zerstückelung des gesichterten Speichers auf die einzelnen Bildcontainer sehr aufwändig. Eig gibt es dafür bereits in unserer Software Klassen. Angenommen ich allokiere den Speicher, locke ihn, delocke ihn und nutzen anschließend unsere Klassen um dann ganz normal, intern über new den Speicher anzufordern, kann ich davon ausgehen, dass der dann ebenfalls im Arbeitsspeicher liegt, also den gerade freigewordenen Platz benutzt? Ist Windows so schlau?

    Ev sollte ein Moderator den Thread in ein geeigneteres Forum verschieben, da dies ja nicht mehr Standart C++ ist.



  • tamasi schrieb:

    ich bräuchte einen Tip, wie ich sicherstellen, bzw abfragen kann, ob ein gerade allocierter Speicher sich im Ram oder in der Auslagerungsdatei befindet.

    Wenn das jeder dürfte, herrschte bloß noch Chaos.

    Es können durchaus mal 500MB+ sein.

    Das sagen die Gamecoderz auch. Und nehmen Dir den Speicher weg.

    Deaktiviere einfach in der Systemsteuerung die ganze Auslagerungsdatei.


Anmelden zum Antworten