AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein SetLength / Getmem / AllocMem out of memory Problem

SetLength / Getmem / AllocMem out of memory Problem

Ein Thema von greenmile · begonnen am 7. Okt 2009 · letzter Beitrag vom 9. Okt 2009
Antwort Antwort
Seite 1 von 3  1 23   
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#1

SetLength / Getmem / AllocMem out of memory Problem

  Alt 7. Okt 2009, 16:31
Hallo,

in meinem Rechner sind, laut Taskmanager, rund 2 GByte verfügbarer Speicher frei . Wenn ich nun ein "Array of Byte" mittels SetLength, oder GetMem, oder AllocMem auf einen Wert > 800 MB setze, bekomme ich ein "EOutOfRessource" Problem, es funktioniert nur bis zu 750 MByte. Gibt es da eine Einschränkung von Delphi? Speicher ist ja da, aber irgendwie finde ich die Logik nicht, wieso es nicht funktioniert ... Hilfe ...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

Re: SetLength / Getmem / AllocMem out of memory Problem

  Alt 7. Okt 2009, 16:36
Zitat von greenmile:
Gibt es da eine Einschränkung von Delphi?
Nö, aber von Windows. Du forderst den Speicher (zwangsweise bei einem Array) als durchgängigen Adressraum an. Und da alle möglichen DLL's kreuz und quer in deinem 4GB (bzw. 2GB User-)Adressraum geladen werden solltest du froh sein überhaupt 750 MB an einem Stück anfordern zu können.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: SetLength / Getmem / AllocMem out of memory Problem

  Alt 7. Okt 2009, 16:43
bei 4 GB ist die Chance groß, daß alles nur in den ersten 2 GB liegt und man somit auch mal mehr zusammenhängenden Speicher bekommt.

Es gibt da nur noch eine Möglichkeit um einen größeren "zusammenhängenden" Speicher auch bei wenig freiem "Platz" hinzubekommen

MMF (Memory Mappes Files) geht auch ohne Dateien, dabei reserviert man sich z.B. genügend Speicher bei Windows und mappt dann nur den gerade benötigten Teil in seinen Anwendunsspeicher.


Ansonsten bleibt dier nur die Wahl einer anderen Speichermethode
z.B. verkettete Liste statt Array
oder eine Gruppe aus mehreren kleineren Arrays


PS: Du kannst dir gern mit der Demo von dort mal deinen Speicher einiger Anwendungen anzeigen
http://www.delphipraxis.net/internal...ct.php?t=62381
allerdings sind dort nur die gemappten Dateien angezeigt und es ist zwischendurch natürlich noch jede Menge anderer Speicher belegt, aber man sieht schonmal deutlich, daß es schwer ist da einen großen zusammenhängenden Speicher zu bekommen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: SetLength / Getmem / AllocMem out of memory Problem

  Alt 7. Okt 2009, 20:40
Zitat von himitsu:
bei 4 GB ist die Chance groß, daß alles nur in den ersten 2 GB liegt und man somit auch mal mehr zusammenhängenden Speicher bekommt.
Was? Effektiv hat man 2 GB Adressraunm zur Verfügung. Was meinst du jetzt mit deiner Aussage?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: SetLength / Getmem / AllocMem out of memory Problem

  Alt 7. Okt 2009, 21:04
man kann es doch auf 3,irgendwas GB erweitern (unter bestimmten Vorausetzungen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: SetLength / Getmem / AllocMem out of memory Problem

  Alt 7. Okt 2009, 21:28
Kann man, in der Boot.ini. Ist aber nicht zu empfehlen, weil schon 2GB für Windows ziemlich knapp bemessen sind. Aber davon mal abgesehen, ich hatte bisher noch nie den Fall, dass mir bei meinen Programmen der Speicher ausgegangen ist. Man sollte also noch mal das Konzept überdenken. Eventuell mit die Datei nur stückweise in den Speicher laden mit MemoryMappedFiles.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: SetLength / Getmem / AllocMem out of memory Problem

  Alt 7. Okt 2009, 21:36
Zitat von himitsu:
man kann es doch auf 3,irgendwas GB erweitern (unter bestimmten Vorausetzungen)
Nur wenn die Exe auch entsprechend Kompiliert wure. Aber seit Windows 2003/Vista/2008/7 würde ich statt ein 32-Bit OS mit einer Bootoption instabil zu machen gleich die 64-Bit Version nehmen.

Zitat von Luckie:
Aber davon mal abgesehen, ich hatte bisher noch nie den Fall, dass mir bei meinen Programmen der Speicher ausgegangen ist.
Wir hatten wir schon den Fall das wir als Hotfix den 3GB-Option beim Compiliern mit D6 aktivieren mussten. Das nächste "normale" Maintenance-Release hatte den Implementierungsfehler behoben und unser App hat sich dann wieder mit << 1 GB RAM bei der Verarbeitung einer größeren DB-Menge begnügt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: SetLength / Getmem / AllocMem out of memory Problem

  Alt 7. Okt 2009, 22:22
Zitat von Bernhard Geyer:
Nur wenn die Exe auch entsprechend Kompiliert wure.
joar, jetzt fehlt nur noch das passende 64-Bit-Delphi, damit man auch richtig für das Win64 schreiben kann
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: SetLength / Getmem / AllocMem out of memory Problem

  Alt 8. Okt 2009, 08:42
Vielen Dank für die Antworten/ausführlichen Ausführungen. Ich benötige im Prinzip nur x MByte/GByte, die ich ansprechen kann. Woher die kommen ist mir dabei egal Also bräuchte ich im Prinzip ein (Array of [Array .. MByte])?

"z.B. verkettete Liste statt Array"

Was meinst Du genau damit?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: SetLength / Getmem / AllocMem out of memory Problem

  Alt 8. Okt 2009, 08:49
Zitat von greenmile:
Vielen Dank für die Antworten/ausführlichen Ausführungen. Ich benötige im Prinzip nur x MByte/GByte, die ich ansprechen kann. Woher die kommen ist mir dabei egal Also bräuchte ich im Prinzip ein (Array of [Array .. MByte])?
Wie schon gesagt. Geht nicht mit Array of Byte.
Dur wirst hier auf andere Datenstrukturen wie verkettete Listen oder ähnliches wechseln müssen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz