Announcement

Collapse
No announcement yet.

Arbeitsspeicher leeren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Arbeitsspeicher leeren

    Hallo Zusammen,

    Ich hätte da mal ne frage, Kann man von Delphi aus den kompletten Inhalt des Arbeitsspeichers leeren oder Teile davon ?

    Wär echt genial wenn da jemand was wüste !

    Danke schon mal im Voraus

    Gruß Christian

  • #2
    Mit GetMem() solange Speicher anfordern bis GetMem() fehl schlägt. Dann diesen Speicher z.b. mit FillChar() überschreiben und wieder freigeben.<br>

    Gruß Hage

    Comment


    • #3
      Hi,

      Also zunächst mal danke für deine schnelle Antwort...

      Aber irgendwie krig ich das nicht hin, hab n bissl hilf gelesen abers klappt nicht. ich muss doch den speicher in irgend ne variable rein anfordern oder ? und in welche ?

      Wär super nett wenn du n kleines Beispiel machen könntest ...

      Danke schon mal im Voraus

      Gruß Christia

      Comment


      • #4
        Natürlich musst du eine Liste aller allozierten Pointer auf diese Speicherbereiche mitführen.<br>
        Es gäbe noch den Weg über Reallocmem() den Speicher so lannge zu vergrößern bis diese Funktion fehlschlägt. Dies dürfte aber nicht zu 100% korrekt funktioniern, d.h. es könnten Speicher frei bleiben.<br>

        Die Frage ist aber warum du dies benötigst.<br>
        Wenn man deinen Ziele genauer kennt kann man auch ein besseres Urteil bilden. Normalerweise wäre nämlich fast jeder Weg den Speicher zu löschen sinnlos, (auf grund des OS Memory Management). Ich vermute das du aus Sicherheitsgründen (Kryptographie) den Speicher löschen möchtest. Aber genau hier ist dein Denkansatz falsch. Ein Löschen des Speichers bringt hier nämlich fast garnichts, wegen's der Speicherauslagerungen, dynamischen Speicherspyings usw.<br>
        Das OS stellt dafür aber andere, sichere, Wege zur Verfügung, die eben aus einer anderen Sichtweise heraus sicherer werden.

        Gruß Hage

        Comment


        • #5
          Also was ich vorhabe ist vollgendes,

          Normaler weise sollte es ja so sein das jedes Programm nach dem Beenden die von ihm genutzen Speicher reserven wieder freigibt.

          Das passiert aber leider nich immer vor allem nach dem Spiele beendet wurden sind noch haufenweise Speicherleichen im RAM vorhanden.

          ich habe jetzt vor gehabt ein kleines Programm zu schreiben was in der TNA sitzt und beim drauf klicken ein mini form anzeigt wo zum einen eine Progressbar drin ist wo den verbrauchten Speicher im Verhälltnis zum Gesamten Speicher anzeigt ( das geht schon ) und eben eien knopf mit dem man den Speicher "aufräumen" kann also mehr oder weniger alles löscht was nicht von noch laufenden anwendungen verwendet wird.

          Ist sowas überhaupt möglich weil ich ja irgendwie wissen muss was gebraucht wird und was nicht

          Comment


          • #6
            Nein, dies geht nicht:
            <li>1. unter 32Bit Windows räumt das OS alle Speicherblöcke auf wenn ein prozess beendet wird, egal ob der Prozess vergisst Speicher aufzuräumen, das OS tut es.
            <li>2. falls es dennoch so sein sollte das Speicherleichen entstehen, was nicht der Fall ist, so würde eine solche Leiche als benutzter Speicher markiert. Man könnte ihn also nicht direkt unterscheiden von tatsächlich benutztem Speicher und einer Leiche.
            <li>3. wenn du dich auf die Resourcenanzeige vom Win9x oder unter Win32 dem Taskmanager, verlässt, dann bist du verlassen. Deren Anzeigen spiegeln nicht den korrekten Zustand des Systemes wieder
            <li>4. besonders unter neueren Windows Versionen erscheint es öfters so das nicht alle Resourcen eines Prozesses entladen werden.Im Grunde stimmt dies auch da das OS diese nicht sofort aufräumt. Dies ist clever, da das OS davon ausgeht das die Wahrscheinlichkeit hoch ist das diese Reourcen zum späteren Zeitpunkt wieder benötigt werden.
            Es kostet zeit diese Resourcen sofort freizugeben und erneut wieder zu laden. Da ist es viel besser wenn das OS eine nicht mehr benötigte Resource im Speicher belässt, sie aber als nicht benötigt markiert, und erst wenn der Speicher knapp wird, werden solche Resourcen entfernt um neuen Resourcen Platz zu machen. Im Ganzen wird dadurch die Gesamtperformance des Systems erhöht. Um so mehr Speicher ein System hat um so mehr kommt dieses Verhalten zum Vorschein.<br>

            Gruß Hage

            Comment


            • #7
              ok klingt plausibel , danke ... dann lass ich das mit meinem vorhaben halt bleiben *ggg* ..

              danke für deine mühen Gruß Christia

              Comment

              Working...
              X