| |
|
|
Michael Dell | Bei folgender Source bin ich überfragt worans liegt, jedenfalls läufts in Profan ab v7.6 wärend Profan2Cpp fehlerwerte liefert (alle Versionen) je nach Compiler sind die Fehlerwerte sogar unterschiedlich. Oder hab ich da vieleicht nen Fehler drin? KompilierenMarkierenSeparieren |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 11.12.2006 ▲ |
|
|
|
|
Sebastian König | Hallo Michael,
sehr seltsam - bei liefert der Code sogar im XProfan 10-Interpreter ein anderes Ergebnis als die Profan 7.6-Exe aus den Archiv... Ich melde mich wieder, sobald ich etwas herausgefunden habe.
MfG
Sebastian |
|
|
| |
|
|
|
Sebastian König | Zwei Dinge sind mir aufgefallen:
1. Gibt GetMemoryStatus() seit XProfan 8.0 und auch mit Profan2Cpp einen Fehlercode zurück - dass sich dann mehr oder weniger zufällige Werte ergeben, ist klar...
2. Sollte der Wert an Offset 28 ausgelesen werden, aber wenn der API-Aufruf schon nicht funktioniert, ist das erstmal nebensächlich.
Was ich leider noch nicht herausfinden konnte ist, warum der API-Aufruf fehlschlägt...
EDIT: Ich sehe gerade: This function does not return a value. - das macht die Sache noch undurchsichtiger. Mit Profan 7.6 ist der Rückgabewert 0, mit späteren Versionen dann etwas, das sehr nach einem Fehlercode aussieht... |
|
|
| |
|
|
|
Sebastian König | Ok, ich denke, ich habe eine Erklärung:
Was Du abfragst, ist das Attribut dwAvailVirtual aus der Struktur. Dazu steht als Beschreibung in der Dokumentation: [quote:146fd6843f=MSDN]Indicates the number of bytes of unreserved and uncommitted memory in the user mode portion of the virtual address space of the calling process.[/quote:146fd6843f] Das erklärt wohl, warum die Werte so unterschiedlich sind - es kommt ganz auf den Prozess an, also auch darauf, wie und womit die Exe-Datei erstellt wurde und in welchen Zustand sich das Programm zum Zeitpunkt des Aufrufs befindet.
Ich vermute mal, Du bist eher an dwAvailPhys interessiert, das wäre dann Offset 12 Bei mir sind damit die Werte dann in allen Varianten auch im Rahmen der Schwankung um einige MB identisch...
Das mit dem Rückgabewert ist vermutlich Zufall. |
|
|
| |
|
|
|
Michael Dell | Funktioniert besten, vielen Dank!!! |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 11.12.2006 ▲ |
|
|
|
|
| Hallo ihr beiden...
Nur zur Info: Commited = virtueller Speicher, der einem realen Speicher zugewiesen wurde Reserved = als belegt markierter virtueller Speicher, der aber keinem realen Speicher zugewiesen wurde Free = freier virtueller Speicher, der realem Speicher zugewiesen werden kann
Nur commited Memory kann wirklich ausgelesen werden, da in allenanderen Fällen gar kein Speicher da ist, den man wirklich auslesen kann. Versucht man auf Speicher zuzugreifen, der nicht commited ist, gibt es die bekannte Zugriffsverletzung (Messagebox und das Proggi wird vom OS gekillt).
Die API GlobalMemoryStatus liefert, wenn es um den virtuellen Speicher geht, keine wirklich brauchbaren Werte. Will man Werte über den virtuellen Speicher anderer Prozesse erfahren, sollte man auf die Native API ausweichen.
Gruß
Andreas |
|
|
| |
|
|