AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi "Nicht genügend Arbeitsspeicher" ?!?
Thema durchsuchen
Ansicht
Themen-Optionen

"Nicht genügend Arbeitsspeicher" ?!?

Ein Thema von friedemann2009 · begonnen am 14. Sep 2012 · letzter Beitrag vom 14. Sep 2012
Antwort Antwort
Seite 1 von 2  1 2      
friedemann2009

Registriert seit: 10. Feb 2010
49 Beiträge
 
#1

"Nicht genügend Arbeitsspeicher" ?!?

  Alt 14. Sep 2012, 12:23
Liebe Leute,

ich bin etwas verwundert: ich habe ein Tool geschrieben, dass komplexe Listenoperationen durchführt. Auf meinem alten PC mit 4GB RAM war das kein Problem; auf dem neuen System mit 16GB RAM erhalte ich jetzt plötzlich bei den gleichen Operationen die Fehlermeldung, es sei nicht genügend Arbeitsspeicher verfügbar. Wie kann das sein?!?

Danke Euch und schöne Grüße,
frieder

PS: An den Systemen hat sich nichts 'zum Schlechteren' geändert, dachte ich zumindest.. (vorher Intel I4 - Desktop-PC, 64Bit, jetzt eine neue Dell-Workstation mit 12-Kernproz.)
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: "Nicht genügend Arbeitsspeicher" ?!?

  Alt 14. Sep 2012, 12:26
Wann tritt der Fehler auf? -> Etwas Source-Code mit Stelle des Fehlers wäre bestimmt auch dem einen oder anderen hilfreich
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: "Nicht genügend Arbeitsspeicher" ?!?

  Alt 14. Sep 2012, 12:28
Da dein Programm ein 32-Bit Executable ist steht dem eh nur 2 (bzw. 3 GB wenn entsprechend Compiliert) zur verfügung.

Ich tipp mal darauf das auf deinem neuen PC viele kleine "Helferlein" dafür sorgen das der Adressraum jeder geladenen 32-Bit Anwendung schon mit DLLs "zerstückelt" ist dein Programm dann keine größeren Adressräume mehr En-Block zur verfügung stehen hat.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: "Nicht genügend Arbeitsspeicher" ?!?

  Alt 14. Sep 2012, 12:43
PS: An den Systemen hat sich nichts 'zum Schlechteren' geändert, dachte ich zumindest.. (vorher Intel I4 - Desktop-PC, 64Bit, jetzt eine neue Dell-Workstation mit 12-Kernproz.)
Gibts wirklich einen Intel I4? Wenn dann einen alten P4, oder einen i3 oder i5

Egal, back to Topic...
Da dein Programm ein 32-Bit Executable ist steht dem eh nur 2 (bzw. 3 GB wenn entsprechend Compiliert) zur verfügung.
Compilierst du eine 32-Bit-Exe oder 64-Bit?

Ich tipp mal darauf das auf deinem neuen PC viele kleine "Helferlein" dafür sorgen das der Adressraum jeder geladenen 32-Bit Anwendung schon mit DLLs "zerstückelt" ist dein Programm dann keine größeren Adressräume mehr En-Block zur verfügung stehen hat.
Bist du sicher mit der Vermutung? sowas sollte doch Windows für einen handeln. Ein Programm schreibt doch eh nur in einen virtuellen Block und da spielt es doch keine Rolle, ob der Block wirklich zusammenhängend ist oder nicht.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
friedemann2009

Registriert seit: 10. Feb 2010
49 Beiträge
 
#5

AW: "Nicht genügend Arbeitsspeicher" ?!?

  Alt 14. Sep 2012, 13:00
Gibts wirklich einen Intel I4? Wenn dann einen alten P4, oder einen i3 oder i5
*Hüstel*, könnte auch ein i3 gewesen sein, bin ich mir nicht mehr sicher..

Compilierst du eine 32-Bit-Exe oder 64-Bit?
Ist als 32-Bit compiliert, aber das war auf dem alten System auch kein Problem. Was mir auch aufgefallen ist: die Anwendung braucht auf dem neuen System viel viel länger (etwa 6:1) zum Laden und die Rechenoperationen dauern ebenfalls länger (gefühlt, habe es nicht gemessen). Kann so etwas sein, obwohl das neue System von der Hardware her im Grunde viel mehr Power haben müsste (Laden läuft auf meinem 32bit-Netbook sogar schneller!)?

Code kann ich leider gerade nicht liefern, weil D (noch) nicht auf dem neuen System läuft..

Danke und schöne Grüße,
frieder

EDIT:

Zitat:
Da dein Programm ein 32-Bit Executable ist steht dem eh nur 2 (bzw. 3 GB wenn entsprechend Compiliert) zur verfügung.

Ich tipp mal darauf das auf deinem neuen PC viele kleine "Helferlein" dafür sorgen das der Adressraum jeder geladenen 32-Bit Anwendung schon mit DLLs "zerstückelt" ist dein Programm dann keine größeren Adressräume mehr En-Block zur verfügung stehen hat.
Ok, das ist krass, das wusste ich nicht. - Aber das erklärt dennoch nicht den Unterschied zwischen den beiden (!) 64-Bit-Systemen!

Geändert von friedemann2009 (14. Sep 2012 um 13:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: "Nicht genügend Arbeitsspeicher" ?!?

  Alt 14. Sep 2012, 13:16
Wie kann das sein?!?
Ich würde da auf "zu viele Daten" tippen.
Was erzählt denn der Taskmanager so?
Wie steht's denn um die Auslagerungsdatei?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: "Nicht genügend Arbeitsspeicher" ?!?

  Alt 14. Sep 2012, 13:18
Win64 hat eine etwas andere Speicherverwaltung und außerdem haben sich einige System-DLLs verändert, womit diese auch noch etwas mehr RAM belegen können.
Allein schon die größeren Dateien vrauchen zwar nicht mehr physischen RAM, aber im virtuellen Arbeitsspeicher wird dennoch mehr Platz belegt.

Wie sah denn die Speicherauslastung auf dem alten System aus?
Waren da die 2 GB auch schon fast randvoll?

Du mußt dir unbedingt klar machen, daß es einen Unterschied zwischen physischem RAM, Auslagerungsdatei (Pagefile) und virtuellem Speicher gibt.
Im System sind vielleich x GB an RAM verbaut und dazu kommt dann noch die Auslagerungsdatei.
Somit hat man zusammen x GB für alle Programme zur Vergügung.

Dein Programm besitzt aber bei 32 Bit nur 2 GB virtuellem RAM (3 GB, wenn man eine gewisse Option aktiviert, im Windows und in der EXE).
Maximal kann von den 2 GB aber nur soviel belegt werden, wie physisch (RAM+Pagefile) zur Verfügng stehen (frei sind).

In diesen 2 GB gibt es dann noch Bereiche, wo man nichts ablegen kann (die ersten 64 KB) und dann liegen auch noch überall die gemappten Teile der DLLs und der EXE (z.B. Programmcode und Resourcen), welche meistens direkt von der Festplatte im virtuellen Speicher abgebildet sind, aber keinen physischen RAM belegen (das selbe gilt für MMF) und dann können Programme gleiche DLLs/EXEn sich teilen, womit diese nur einmal für Alles im physischem RAM liegen und nur in den Virtuellen reingemappt werden.

Und der Restliche virtuelle Speicher ist quasi dich. Aber auch da kann man nur speicher reservieren, wenn man ein Stückchen findet, das groß genug ist.
Will man z.B. ein Array mit 1 GB erstellen, dann braucht man dafür einen Speicherblock, welcher zusammenhängend mindestens 1 GB groß ist, was nicht so einfach wird, wenn wild verteilt sonstwas darin rumliegt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (14. Sep 2012 um 13:27 Uhr)
  Mit Zitat antworten Zitat
friedemann2009

Registriert seit: 10. Feb 2010
49 Beiträge
 
#8

AW: "Nicht genügend Arbeitsspeicher" ?!?

  Alt 14. Sep 2012, 13:42
Puh, erst mal vielen Dank für die Infos. Es wird also wirklich Zeit, mich von D5 (ja, ich weiß..) zu verabschieden; wollte mir die neu erschiedenene RAD Studio XE3 besorgen.

Ganz klar ist mir allerdings immer noch nicht, warum die selbe 32bit-Exe auf dem einen 64-Bit-System (mit weniger Rechenpower) besser läuft als auf anderen (und besseren) 64-Bot-System (beide Win7 übrigens). Das läuchtet mir nach Euren Erklärungen noch nicht ein.

Taskmanager hatte ich beobachtet: sowohl virt. als auch physischer Arbeitsspeicher waren, wenn ich nicht total blöd bin, nicht komplett ausgelastet (zumindest in dem Moment der Fehlermeldung). Waren im einen Fall ~8GB, im anderen Fall etwa 2GB "frei".

Schöne Grüße,
frieder
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: "Nicht genügend Arbeitsspeicher" ?!?

  Alt 14. Sep 2012, 13:44
Ich tipp mal darauf das auf deinem neuen PC viele kleine "Helferlein" dafür sorgen das der Adressraum jeder geladenen 32-Bit Anwendung schon mit DLLs "zerstückelt" ist dein Programm dann keine größeren Adressräume mehr En-Block zur verfügung stehen hat.
Bist du sicher mit der Vermutung? sowas sollte doch Windows für einen handeln. Ein Programm schreibt doch eh nur in einen virtuellen Block und da spielt es doch keine Rolle, ob der Block wirklich zusammenhängend ist oder nicht.
Kommt darauf an was genau "komplexe Listenoperationen" bedeutet. Hier kann man mit großen dynamischen Arrays ziemlich leicht probleme bekommen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
friedemann2009

Registriert seit: 10. Feb 2010
49 Beiträge
 
#10

AW: "Nicht genügend Arbeitsspeicher" ?!?

  Alt 14. Sep 2012, 14:25
Ok, ich sehe schon: ich sollte einfach mal 64bit compilieren und auf dem neuen System via XE3 durchtesten.

Danke für Hilfe und schönes WE,
frieder
  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 17:02 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