AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SetLength -> Zu wenig Arbeitsspeicher?

Ein Thema von AJ_Oldendorf · begonnen am 11. Aug 2010 · letzter Beitrag vom 18. Aug 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: SetLength -> Zu wenig Arbeitsspeicher?

  Alt 11. Aug 2010, 11:56
Ok verstehe ich aber das kann ja wohl keine Lösung sein oder?
Ich sag mal ganz krass, wenn ich viele Stringlisten mit vielen Objekten oder Zeigern habe, dann ist es doch keine Lösung "einfach" bei 2GB den Riegel vor die Tür zu schieben wenn mein Rechner doch 4GB hat...
Macht doch kein Sinn oder?

Gruß
Alex
Doch macht es. Die anderen 2GB werden mehr oder weniger vom Betriebssystem benötigt. Ich glaube es gibt sogar irgendeinen Tick mit dem man auf 3GB oder so aufstocken kann, aber im Normalfall ist es wirklich so, dass man damit gut auskommen sollte. Wenn du nicht damit auskommst, dann solltest du tatsächlich deinen Code überdenken.

Also wenn ich ein Programm im Taskmanager sehen würde, was 2GB Speicher verbraucht, dann wär das aber ganz schnell abgeschossen....
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
473 Beiträge
 
Delphi 12 Athens
 
#2

AW: SetLength -> Zu wenig Arbeitsspeicher?

  Alt 11. Aug 2010, 12:08
hab mir schon sowas gedacht... kannst du vielleicht trotzdem mal wegen dem trick den du angesprochen hast nachgucken?
ich gucke mal, ob man irgendwelche daten wirklich auslagern kann.
danke und viele grüße
Alex
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
473 Beiträge
 
Delphi 12 Athens
 
#3

AW: SetLength -> Zu wenig Arbeitsspeicher?

  Alt 11. Aug 2010, 12:11
ok, meinte eigentlich auch, dass der Rechner zwar 4GB hat aber ja nur bis max. 3,5 (ca.) adressierbar sind.
Kann mann denn den Speicher irgendwie zur Laufzeit der Anwendung deframentieren? Sicherlich nicht oder?

Viele Grüße
Alex
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.223 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: SetLength -> Zu wenig Arbeitsspeicher?

  Alt 11. Aug 2010, 12:15
ok, meinte eigentlich auch, dass der Rechner zwar 4GB hat aber ja nur bis max. 3,5 (ca.) adressierbar sind.
Ein 32-Bit prozess hat normalerweise nur 2GB zur Verfügung. 3GB mit entsprechenden compilerschalter ({$SetPeFlags $20}) wenn auch das OS mitspielt (64-Bit Windows immer, 32-Bit je nach Boot-Option.

Kann mann denn den Speicher irgendwie zur Laufzeit der Anwendung deframentieren? Sicherlich nicht oder?
Nein. Du hast mit Delphi ein Unmanaged System das sowas praktisch nicht ermöglicht. In Managed Umgebungen (Java/.NET) wäre sowas möglich (weiß aber nicht ob es implementiert ist).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.398 Beiträge
 
Delphi 12 Athens
 
#5

AW: SetLength -> Zu wenig Arbeitsspeicher?

  Alt 11. Aug 2010, 12:20
Gegen eine Defragmentierung kann man nicht viel machen, außer Speicheroperationen zu optimieren und seltener Speicher neu reservieren, umzureservieren/freizgeben und z.B. Speicherbplätze wiederzuverwenden.

Defragmentieren geht nicht, denn dann müßtest du im gesamten Programm sämtliche Zeiger kennen, welche auf die zu verschiebenden Teile zeigen (welche du nichtmal alle kennst) auch mit anpassen.


Hast du denn mal nach Speicherlecks geschaut? (Beitrag #3)
Oder installier dir das große FastMM und schau da mal in die MemoryMap (grafische Speichernutzungsübersicht).
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: SetLength -> Zu wenig Arbeitsspeicher?

  Alt 11. Aug 2010, 12:24
Gegen eine Defragmentierung kann man nicht viel machen, ...
Wieso sollte man auch?
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 xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#7

AW: SetLength -> Zu wenig Arbeitsspeicher?

  Alt 11. Aug 2010, 12:24
Wozu muss man Speicher überhaupt "defragmentieren"? Ich meine eine Festplatte verliert selber doch auch kaum Speicher wenn sie fragmentiert ist? Da geht es doch nur darum, schnell hintereinander darauf zuzugreifen?

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: SetLength -> Zu wenig Arbeitsspeicher?

  Alt 11. Aug 2010, 12:26
Wenn aber kein zusammenhängender Speicherblock der entsprechenden Größe verfügbar ist, kann man auch kein solchen anfordern
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.398 Beiträge
 
Delphi 12 Athens
 
#9

AW: SetLength -> Zu wenig Arbeitsspeicher?

  Alt 11. Aug 2010, 12:35
Speicherblöcke im RAM sind immer zusammenhängend ... Dateien können stückchenweise verteilt sein.

Defragmentieren heißt hier nur, daß zwischen den vielen Speicherblöck viele und eventuell zu kleine Speicherbereiche frei sind, welche man benutzen könnte.

Wenn da z.B. nur 20.000 freie Bereiche a maximal 100 Byte überall verteilt rumliegen, sonst alles voll ist und du aber einen Block mit 1000 Byte benötigst, dann paßt der nirgendwo rein,obwohl insgesamt noch genug frei wäre.



aber hier sollte man erstmal
> nach Speicherlecks ausschau halten
und eventuell
> die Speichermap anschauen, ob es wirklich zu soeiner Defragmentierung kommt
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
473 Beiträge
 
Delphi 12 Athens
 
#10

AW: SetLength -> Zu wenig Arbeitsspeicher?

  Alt 11. Aug 2010, 13:01
Ich werde mir das mal angucken mit den Speicherlecks und Speichermap.
Vielleicht komm ich da ja dahinter...
Glaube aber wirklich, dass es wirklich nur an der Fragmentierung liegt da laut TaskManager eben diese 2GB Grenze gar nicht erreicht wird von der Anwendung!

Viele Grüße
Alex
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:51 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