AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Unerklärbare Fehlermeldung
Thema durchsuchen
Ansicht
Themen-Optionen

Unerklärbare Fehlermeldung

Ein Thema von Berserker · begonnen am 24. Feb 2004 · letzter Beitrag vom 25. Feb 2004
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Unerklärbare Fehlermeldung

  Alt 25. Feb 2004, 02:13
Na vielleicht speichern die die Größe des verfügbaren RAM's nicht in nem Integer, sondern n schnuckeliges Byte oder wahrscheinlicher Word oder so. Gibt alles auf dieser Welt - mich erschüttert (fast) nix mehr

Wird der virtuelle Adressraum auch dann mit 2Gig vergeben, wenn man die Swap-Datei auf 64MB nagelt, und nur 256MB RAM hat!? Das wäre ja gerade zu über-optimistisch.

Aber irgend etwas in diese Richtung muss es sein. Sonst ließe sich das Phänomen für mich gerade nicht mehr klären. Ist meine einzige (vielleicht etwas dumme) Idee z.Zt.
Oder was gäbe es da noch?


\edit:
Zitat von Luckie:
Ein Prozess hat also 2 GB zur Verfügung und die kann ich auf 32-Bit Systemen mit einem Integer ansprechen.
Wie kann dann Delphi meinen, dass eine Variable nicht größer als 4 Gig werden kann, wenn doch effektiv nur 2 zur Verfügung stehen? Und ein 32-Bit-Integer hat bei mir 4.294.967.295 positive Zustände (so er unsigned ist) => 4 Gig. Oder gibt's 4 Gig für ein jeden Prozess, aber 2 werden schon mal pro forma für Win abgezogen, könnten aber, wenn sie wollten, vom Programm genutzt werden? Mein Speicher-Managment-Bild in meinem Hirn verkrempelt sich grad
Wie läuft das jetzt genau?
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Unerklärbare Fehlermeldung

  Alt 25. Feb 2004, 02:22
2 GB Adressraum, nicht mehr und nicht weniger. Und zwar spricht man von virtuellen Speicher. Der erst auf real vorhandenen physischen "gemappt" wird, wenn drauf zugegriffen wird. Dann tritt folgender Mechanismus in Kraft:
Und zwar geht das seitenweise. Unter Windows 32-Bit Intel hat eine Seite 4 KB im Speicher. Ist jetzt noch was frei wird einfach gemappt. Ist nichts mehr frei, kuckt Windows welche Seiten nicht mehr gebraucht werden und lagert diese in den PageFile auf der Festplatte aus. Unterscheidet sich die Seite im RAM von der im PageFile wird geschrieben ist das nicht der Fall wird einfach die benötigte Seite in den RAM geschrieben. Ist eine Seite nicht im RAM verfügbar und muss nachgeladen werden, spricht man von Seitenfehlern.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Unerklärbare Fehlermeldung

  Alt 25. Feb 2004, 02:24
Die Größe eines Integers wird nicht von Delphi, sondern von der Rechnerarchitektur bestimmt. Unter 64-Bit hat ein Integer eine größe von 64-Bit.

Sag ich doch, 2 GB kann ich mit einem 32-Bit Integer ansprechen. Rein theoretsich sogar 4 GB nur was will ich da? Windows stellt mir doch effektiv eh nur 2 GB zur Verfügung.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Unerklärbare Fehlermeldung

  Alt 25. Feb 2004, 02:43
Zitat von Luckie:
2 GB Adressraum, nicht mehr und nicht weniger. Und zwar spricht man von virtuellen Speicher. Der erst auf real vorhandenen physischen "gemappt" wird, wenn drauf zugegriffen wird. Dann tritt folgender Mechanismus in Kraft:
Und zwar geht das seitenweise. Unter Windows 32-Bit Intel hat eine Seite 4 KB im Speicher. Ist jetzt noch was frei wird einfach gemappt. Ist nichts mehr frei, kuckt Windows welche Seiten nicht mehr gebraucht werden und lagert diese in den PageFile auf der Festplatte aus. Unterscheidet sich die Seite im RAM von der im PageFile wird geschrieben ist das nicht der Fall wird einfach die benötigte Seite in den RAM geschrieben. Ist eine Seite nicht im RAM verfügbar und muss nachgeladen werden, spricht man von Seitenfehlern.
Dass heisst Windows geht erstmal fröhlich davon aus, dass es auslager KANN, und zwar zunächst unbegrenzt (jetet global für alle Prozesse), und vergibt zunächst ein und den selben Bereich für mehrere Prozesse. Nutzt einer dieser Prozesse diesen Bereich (oder zum Teil), so wird er den anderen entzogen, und um-gemappt. Und wenn Win jetzt an die Grenze des gesamten Speichers (RAM+PageFile) stößt, gibbet eine entsprechende Meldung wenn darüber hinaus was passieren soll. Sehe ich das richtig?
Dann würde Win ja bei einer Gesamtspeicher-Größe von unter 2 Gig schon von vorne herein mehr versprechen als überhaupt möglich! Klingt nach echter Politik

Zitat von Luckie:
Die Größe eines Integers wird nicht von Delphi, sondern von der Rechnerarchitektur bestimmt. Unter 64-Bit hat ein Integer eine größe von 64-Bit.
... des is klar *g*

Zitat von Luckie:
Sag ich doch, 2 GB kann ich mit einem 32-Bit Integer ansprechen. Rein theoretsich sogar 4 GB nur was will ich da? Windows stellt mir doch effektiv eh nur 2 GB zur Verfügung.
Stimmt, so hab ich das jetzt nicht gesehen. Wenn ich 4 Gig addressieren kann, kann ich latürnich auch 2 Gig addressieren. Aber dann ist die Größe eines Integers eher sekundär verantwortlich. Windows könnte ja auch sagen: Ich brauche 3 Gig, die Prozesse bekommen halt nur einen.


Danke dir für das kleine Interludium!

\edit: quote-tags vermurkst...

\edit2: An dieser Stelle mal ein Danke u.A. für LuckieDips! Bin ein viel-bildschirm-umschalter, und das verduselt mir immer meine Icons. JETZT NICHT MEHR! *drüx*
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Unerklärbare Fehlermeldung

  Alt 25. Feb 2004, 03:06
Zitat von dizzy:
Dass heisst Windows geht erstmal fröhlich davon aus, dass es auslager KANN, und zwar zunächst unbegrenzt (jetet global für alle Prozesse), und vergibt zunächst ein und den selben Bereich für mehrere Prozesse. Nutzt einer dieser Prozesse diesen Bereich (oder zum Teil), so wird er den anderen entzogen, und um-gemappt. Und wenn Win jetzt an die Grenze des gesamten Speichers (RAM+PageFile) stößt, gibbet eine entsprechende Meldung wenn darüber hinaus was passieren soll. Sehe ich das richtig?
Dann würde Win ja bei einer Gesamtspeicher-Größe von unter 2 Gig schon von vorne herein mehr versprechen als überhaupt möglich! Klingt nach echter Politik
Es ist schwer zu erklären. Du musst zwischen virtuellen und real vorhandenen physischen Speicher unterscheiden. Nehmen wir mal zwei Prozesse A und B. Beide haben eine globale Integer Variable deklariert. Die können jetzt im Speicher an der gleichen fiktiven Adresse $FFFF für den jeweiligen Prozess stehen. Und es wird nichts überschrieben und Prozess A liest nicht die Variable von Prozess B und umgekehrt. Beide Prozesse haben keinen Zugriff auf den virtuellen Speicher des jeweiligen anderen Prozesses, ja sie sehen ihn noch nicht mal. Soll jetzt aber die CPU damit arbeiten, muss die Variable im physichen Arbeitsspeicher stehen und da geht das Kopieren von den Seiten los. Nehmen wir weiter an es gibt nur diese zwei Prozesse im ganzen System und ich habe nur ganz wenig Arbeitsspeicher. Nehmen wir an die Variable von Prozess B ist im Arbeitsspeicher. Prozess A bekommt jetzt Rechenzeit zugeteilt. Die Variable von Prozess B wird nicht mehr gebraucht, also wird sie in den PageFile geschrieben und die Variable von Prozess A an die Stelle im Arbeitsspeicher kopiert, wo vorher die Variable von Prozess B stand.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Unerklärbare Fehlermeldung

  Alt 25. Feb 2004, 06:18
Handelt es sich bei dem Programm um ein 16-bit-Programm? Alte - für Windows 3.x - programmierte Programme haben häufig Probleme mit großem Speicher. Ich besitze z.B. eine uralt-Version des S-Designors, bei dem das Installationsprogramm bereits mault, daß ich zu wenig Speicher hätte, weil er -1598 MByte Speicher ermittelt...

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Unerklärbare Fehlermeldung

  Alt 25. Feb 2004, 13:03
Ja möööönsch, GENAU sowas meine ich doch

[OT]
@Luckie: Dann hab ich das an sich ja richtig im Hinterkopf. Mein eigentliches Problem ist weniger das Management an sich, sondern eher die Tatsache, dass Win jedem Prozess 2 Gig "verspricht", selbst wenn RAM+PageFile zusammen nicht so viel hergeben. Zumindest würde es nach meinem Wissensstand nach so sein. Und wenn's dann mal nicht mehr passt, weil der gesamte Speicher bereits alloziiert ist, sagt Win schnell per Messagebox bescheid (hat es bei mir schon des Öfteren...).
[end of OT]
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Unerklärbare Fehlermeldung

  Alt 25. Feb 2004, 13:07
Die 2 GB sind ja virtuell und die hat es immer.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#19

Re: Unerklärbare Fehlermeldung

  Alt 25. Feb 2004, 13:27
denke auch, daß Dizzy's Vermutung stimmen könnte. "Zuviel" wird dann plötzlich "zuwenig".
Auch unsere Auftragsverwaltung (eigentlich Windows 32bittig entwickelt) meldet ab und zu zuwenig virtuellen Speicher auf der Platte. Auf dieser (Linux-)Partition waren aber 76 GB frei. Möglicherweise läuft wirklich eine dumm codierte Speicherermittlung über und schlägt ins Negative um.

Roderich
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: Unerklärbare Fehlermeldung

  Alt 25. Feb 2004, 14:03
Zitat von Luckie:
Die 2 GB sind ja virtuell und die hat es immer.
Solange sie virtuell bleiben klar. Nur wenn auf einmal der komplette Bereich von 2 Gig auf 512MB RAM und ein fixes PageFile von 512MB angefordert, und somit auf reale Adressen gemapped wird, hat's ein Problem, oder nicht? Irgendwo müsste ja das über-bleibende Gig noch hin - nur RAM ist voll, und PageFile auch. Dass heisst, dass ein Prozess u.U. garnicht den ganzen Bereich nutzen kann, der ihm zugesichert wird, da er schlicht weg nicht existiert.
Und eine Verfügbarkeitsprüfung muss sich ja nicht auf den vietuellen Speicher beziehen, sondern kann (wie wahrscheinlich in diesem Fall geschehen) sich auf das phys. RAM beschränken. Das tut Windows ja auch, wenn man sich die Systemresourcen im Taskmanager anguckt. Und wenn dort ein zu großer Wert erscheint, so könnte ein ungeeigneter Datentyp mit diesem Wert gefüttert doch fröhlich umschlagen!?


gruss,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 07:40 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