Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Unerklärbare Fehlermeldung (https://www.delphipraxis.net/16852-unerklaerbare-fehlermeldung.html)

dizzy 25. Feb 2004 01:13

Re: Unerklärbare Fehlermeldung
 
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 :zwinker:

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? :gruebel:


\edit:
Zitat:

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 :freak:
Wie läuft das jetzt genau?

Luckie 25. Feb 2004 01:22

Re: Unerklärbare Fehlermeldung
 
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.

Luckie 25. Feb 2004 01:24

Re: Unerklärbare Fehlermeldung
 
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.

dizzy 25. Feb 2004 01:43

Re: Unerklärbare Fehlermeldung
 
Zitat:

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:

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 :roll: *g*

Zitat:

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! :dp:

\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* :thuimb:

Luckie 25. Feb 2004 02:06

Re: Unerklärbare Fehlermeldung
 
Zitat:

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.

mikhal 25. Feb 2004 05:18

Re: Unerklärbare Fehlermeldung
 
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

dizzy 25. Feb 2004 12:03

Re: Unerklärbare Fehlermeldung
 
Ja möööönsch, GENAU sowas meine ich doch :mrgreen:

[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]

Luckie 25. Feb 2004 12:07

Re: Unerklärbare Fehlermeldung
 
Die 2 GB sind ja virtuell und die hat es immer.

roderich 25. Feb 2004 12:27

Re: Unerklärbare Fehlermeldung
 
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

dizzy 25. Feb 2004 13:03

Re: Unerklärbare Fehlermeldung
 
Zitat:

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:14 Uhr.
Seite 2 von 3     12 3      

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