AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Freier Speicher in Delphiprogrammen ermitteln?
Thema durchsuchen
Ansicht
Themen-Optionen

Freier Speicher in Delphiprogrammen ermitteln?

Ein Thema von Mavarik · begonnen am 12. Jul 2012 · letzter Beitrag vom 18. Jul 2012
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.159 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Freier Speicher in Delphiprogrammen ermitteln?

  Alt 16. Jul 2012, 12:54
Du, Mavarik scheinst aber ein grundlegendes Verständnisproblem bei der Windows-Speicherverwaltung zu haben.
Nein eigentlich nicht... Trotzdem Danke für Dein langes Posting um mich zu belehren...
Eine Antwort auf meine Frage wäre mir lieber gewesen...

Vielleicht ist die hier etwas unter gegangen:

Wie kann ich den Restspeicher für ein dynamisches Array ermitteln? Hier wäre es wichtig auch noch einen "restspeicher" für das laufende Programm frei zu halten!


Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.228 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Freier Speicher in Delphiprogrammen ermitteln?

  Alt 16. Jul 2012, 12:57
Wie kann ich den Restspeicher für ein dynamisches Array ermitteln? Hier wäre es wichtig auch noch einen "restspeicher" für das laufende Programm frei zu halten!
Da eine dynamisches array AFAIK einen durchgehenden Adressbereich benötigt stellt das für dein "Restspeicher" kein Problem dar, da ja du nur den größten Durchgehenden Adressbereich anforderst aber tausende kleinere Adressblöcke für das "Restprogramm" immer noch verfügbar sin.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
tgvoelker

Registriert seit: 9. Sep 2002
Ort: Oelsnitz, Vogtland
44 Beiträge
 
Delphi 12 Athens
 
#3

AW: Freier Speicher in Delphiprogrammen ermitteln?

  Alt 17. Jul 2012, 09:00
...um mich zu belehren...
Entschuldige bitte, war ein langer Tag und eine Belehrung lag nicht in meiner Absicht. Ich wollte eigentlich darlegen, warum GlobalMemoryStatus nicht geeignet ist, Dir entsprechende Informationen zu liefern.


Wie kann ich den Restspeicher für ein dynamisches Array ermitteln? Hier wäre es wichtig auch noch einen "restspeicher" für das laufende Programm frei zu halten!

Mavarik
Der verfügbare Restspeicher für ein dynamisches Array ergibt sich aus der Größe des Segments, in dem das Array angelegt wurde. Das hilft Dir nun nicht so richtig weiter, weil Du ein array of Pointer hast und für jeden Neueintrag einen Speicherbereich allokierst. Das geht solange, wie Segmente frei sind, in die die neu allokierten Speichermengen reinpassen.

Da Du 256MB-Blöcke allokierst, geht das solange, bis kein Segment mehr da ist, das 256 MB groß ist.

Den verfügbaren virtuellen Speicher kannst Du mit GlobalMemoryStatusEx ermitteln:

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Das Problem der Segmentierung bleibt aber nach wie vor bestehen. Wenn Du mehr Speicher allokieren willst, als das größte Segment hat, dann kommst Du um eine Struktur, die über die Segmente eine virtuelle Adressierung legt, nicht herum. ==> TSegmentedMemoryStream.
Thomas Völker
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.159 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Freier Speicher in Delphiprogrammen ermitteln?

  Alt 18. Jul 2012, 19:41
Da Du 256MB-Blöcke allokierst, geht das solange, bis kein Segment mehr da ist, das 256 MB groß ist.
Nein das war nur für den Test...

Ich programmiere eine Dateiverwaltung die Freelisten, Dirs, Datensegmentlisten usw. in TByteDynArray speichert, die an dauernd erzeugt, vergrößert und wieder verkleinert werden...

Unzählge Setlength Befehle nach 10 Min. Müsste der Speicher eigentlich aussehen wie Schweizer Käse...

Was ich auf keinen Fall will ist eine Out of Memmory Exception...

Daher die Frage...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#5

AW: Freier Speicher in Delphiprogrammen ermitteln?

  Alt 18. Jul 2012, 19:56
Das ändert aber am Kernproblem nichts: sobald kein zusammenhängender Speicherblock in der benötigten Größe mehr frei ist, ist Schicht im Schacht, obwohl in der Gesamtheit noch genügend Speicher vorhanden wäre. Ein Schritt weg von Arrays hin zu Listen kann das Problem zumindest abmildern.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.159 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Freier Speicher in Delphiprogrammen ermitteln?

  Alt 18. Jul 2012, 21:02
hmm..

Das würde ein komplett neues Konzept bedeutet...

Kann ich davon ausgehen, dass hintereinander liegende wieder frei gegebene Segmente wieder zu einem großen block zusammen gefasst werden?

Mavarik
  Mit Zitat antworten Zitat
tgvoelker

Registriert seit: 9. Sep 2002
Ort: Oelsnitz, Vogtland
44 Beiträge
 
Delphi 12 Athens
 
#7

AW: Freier Speicher in Delphiprogrammen ermitteln?

  Alt 18. Jul 2012, 21:35
hmm..

Das würde ein komplett neues Konzept bedeutet...

Kann ich davon ausgehen, dass hintereinander liegende wieder frei gegebene Segmente wieder zu einem großen block zusammen gefasst werden?

Mavarik
Ja. Die Frage ist allerdings, ob die Maßgabe für die Freigabe von Speicher ist, ob die Speicherbereiche beieinander liegen, oder, ob Du die enthaltenen Strukturen noch brauchst.
Thomas Völker
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz