Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wo ist der Speicher? (https://www.delphipraxis.net/130607-wo-ist-der-speicher.html)

Mattze 11. Mär 2009 07:56


Wo ist der Speicher?
 
Hallo,

Windows zeigt richtig 2 GB, das Bios auch.
Wenn ich per GlobalMemoryStatus dmTotalPhys auslese, kriege ich nur 2046 MB, genau 1.658.880 Byte weniger. :(
Mein Freund hat 1.280MB. Per GlobalMemoryStatus werden nur 1279MB angezeigt. :(

Wo ist der Rest? Und wie rechnet Windows das korrekt hoch?

Gruß
Mattze

Uwe Raabe 11. Mär 2009 08:41

Re: Wo ist der Speicher?
 
Das hat offensichtlich mit der Heisenberg'schen Unschärferelation zu tun, nach der die Überprüfung eines zu messenden Wertes eben diesen durch die Messung verfälscht. Hier scheint es der Code zu sein, der den freien Speicher misst, dabei aber selber Speicher verbraucht. :wink:

nahpets 11. Mär 2009 08:48

Re: Wo ist der Speicher?
 
Hallo,

schau mal bitte beim Hersteller nach, der schreibt da lapidar: GlobalMemoryStatus can return incorrect information. Use the GlobalMemoryStatusEx function instead..

@Uwe Raabe
Deine Antwort gefällt mir 8)

himitsu 11. Mär 2009 09:21

Re: Wo ist der Speicher?
 
ich glaub Speicher für dir Grafikkarte (Shared Memory) und z.B. für die Cache des BIOS wird auch oftmals Speicher abgezwackt, welcher dann nicht für Windows zur Verfügung steht und demnach nicht angezeigt wird.

Und dann gibt es ja auch noch Rundungsfehler.

BAMatze 11. Mär 2009 09:36

Re: Wo ist der Speicher?
 
Ich bin mir zwar jetzt auch nicht so sicher, aber wenn man sich mal die Fertigungsgenauigkeiten und auch die Fähigkeit der Messverfahren sieht, die zwar schon sehr gut sind aber ebend nicht perfekt, solltest du eh immer damit rechnen, dass du nicht wirklich genau 2GB Speicher hast sonder nur annähernd 2GB. Gehen wir jetzt mal davon aus, dass nur bei der Fertigung und bei der Messung "kleine" Fehler auftreten (lassen wir mal Bios und andere Bereiche außer Acht, die auch noch Speicher benötigen), welche sich dann auch noch Addieren, dann kommen wir bei 2.048.000.000 und fehlenden 1.658.880 Byte auf einen Gesamtfehler von 0,081%.
Jetzt kommt noch der Einwurf von ein paar meiner Vorredner dazu, dass Speicher ja auch bei der Messung belegt ist, also kannst du grob sagen der fehlende Speicher x liegt wohl locker unter 0,081%. Ich finde das ist eigentlich ok. Wenn du aber vieleicht genaueres Wissen willst, kannst du zumindest den Messfehler verbessern, indem du Messreihen anlegst und zwischen den Messreihen vieleicht auch die Vergleichsbedingungen (eins der Merkmale muss geändert werden: Messverfahren, Durchführender oder Messort). Für näheres hält die Familie der DIN9000 mehr Informationen bereit.

Hoffe der Beitrag konnte dir etwas weiter helfen.

BAMatze

Satty67 11. Mär 2009 10:36

Re: Wo ist der Speicher?
 
Zitat:

GlobalMemoryStatus dmTotalPhys
Wieviel Speicher sein Code braucht ist wohl egal, auch wieviel andere Anwendungen/Bios brauchen. Er liest ja die Menge des physikalisch vorhanden Speichers aus, nicht den freien Speicher.

Umrechnungsfehler... entweder im Programm, API oder sonstwo. Einfach aufrunden mit 32 MByte Genauigkeit. So kleine Riegel verbaut ja heute keiner mehr.

himitsu 11. Mär 2009 10:58

Re: Wo ist der Speicher?
 
Zitat:

Zitat von Satty67
Wieviel Speicher sein Code braucht ist wohl egal, auch wieviel andere Anwendungen/Bios brauchen. Er liest ja die Menge des physikalisch vorhanden Speichers aus, nicht den freien Speicher.

nicht unbedingt ... wenn das BIOS Speicher abzwackt und dem Windows dann sagt es gäbe nur noch soviel (Windows schaut sich ja nicht an welche Riegel drin sind, sondern fragt das BIOS), dann weiß Windows nichts von dem fehlenden Speicher und zeigt diesen auch nicht an.

Satty67 11. Mär 2009 11:07

Re: Wo ist der Speicher?
 
Zitat:

Zitat von himitsu
wenn das BIOS Speicher abzwackt und dem Windows dann sagt es gäbe nur noch soviel

Richtig! Google sagt auch, das der Wert vom Bios falsch geliefert wird, bzw. der Wert ist, den Windows nutzen kann. (Kann je nach Speicher-Mode sogar 18 MByte weniger sein)

Aber dann ist dmTotalPhys der falsche Begriff, denn egal wie viel irgendwer abzwackt, bleiben 2048 MByte physikalisch installierter Speicher. Muss man dann wohl als ein dmTotalAvailAfterBiosCatchHisPart sehen.

Bleibt also nur runden nach oben, wenn man die installierte (Hardware) Speicher-Menge anzeigen will.

himitsu 11. Mär 2009 11:15

Re: Wo ist der Speicher?
 
dmTotalPhys ist sozusagen der totale und Windows zur Verfügung stehende Speicher ... und da stimmt der Name schon irgendwie :angel2:

Satty67 11. Mär 2009 11:38

Re: Wo ist der Speicher?
 
Ok, dann gebe ich mich geschlagen, wohl nur eine Frage der Formulierung.

Dann (wenn man den installierten Speicher will) 31 Mbyte dazu zählen und wieder auf 32 MByte Genauigkeit abrunden. Können ja immerhin 18 MByte weniger sein, soweit die von mir gefunden Berichte stimmen.

himitsu 11. Mär 2009 11:46

Re: Wo ist der Speicher?
 
wenn du wirklich den "korrekten" vorhandenen Speicher haben willst, dann kommst du nicht umhin die Speicherbänke abzufragen.

z.B. bei einigen Notebooks sind mal locker mehr als 32 MB weg (für die Grafikkarte)

Mattze 11. Mär 2009 14:03

Re: Wo ist der Speicher?
 
Hallo,

au-weiha. Habe ich ja was losgetreten.

GlobalMemoryStatus zeigt mit und ohne EX das gleiche an.
Und Windows XP zeigt zu mindestens in den Eigenschaften vom Arbeitsplatz 2GB an.
Da es ja 2GB-2MB sind fragt sich, ob die da nur aufgerundet haben?
(Fände ich nicht korrekt, aber was ist bei Windows schon korrekt...)

Gruß
Mattze

Mattze 11. Mär 2009 14:20

Re: Wo ist der Speicher?
 
Hallo,

noch eine Frage dazu (aus Interesse):
Eigentlich wollte ich den Speicher "spaßeshalber" auf das Byte genau angeben.
himitsu hat geschrieben, dass man da wohl nicht umhin kommt, die Speicherbänke direkt abzufragen.

Wie geht denn das? Sooo tief bin ich noch nie in die Abgründe niedergestiegen.

Gruß
Mattze

jaenicke 11. Mär 2009 14:31

Re: Wo ist der Speicher?
 
Das geht mit WMI und Win32_PhysicalMemory relativ einfach:
http://msdn.microsoft.com/en-us/library/aa394347.aspx
http://www.delphi-forum.de/viewtopic...=551899#551899

Mattze 16. Mär 2009 15:07

Re: Wo ist der Speicher?
 
Hallo,

vielen Dank für Eure Tipps.

Geht das auch irgendwie direkt, ohne WMI?

Ich zitiere aus dem zuletzt genannten Link: "Da ich bei Delphi+WMI jedesmal Hautausschlag kriege..."
Sicher, das ist ganz anders gemeint, aber es illustriert, wie es mir geht.

Es hat sich schon soviel zwischen System und Programmierer geschoben. Und da kommt noch WMI daher und erhöht auch noch gleichzeitig die Abhängigkeit von MS.
Ich mag WMI nicht!

Und WMI greift auch nur auf die API-Funktionen zu. Sicherlich auch auf von MS nicht dokumentierte - was ja schon eine Frechheit von denen ist!
Dazu vielleicht auch noch auf Funktionen des DDK.
Jedenfalls müsste man das auch direkt als einfacher Programmierer mit der API hinbekommen, oder?

Gruß
Mattze

jaenicke 16. Mär 2009 15:57

Re: Wo ist der Speicher?
 
Zitat:

Zitat von Mattze
Und WMI greift auch nur auf die API-Funktionen zu. Sicherlich auch auf von MS nicht dokumentierte - was ja schon eine Frechheit von denen ist!

Das stimmt so nicht, jedenfalls hört es sich so an als wüsstest du nicht wie WMI eigentlich funktioniert...
http://msdn.microsoft.com/de-de/library/ms811533.aspx

Zitat:

Zitat von Mattze
Dazu vielleicht auch noch auf Funktionen des DDK.
Jedenfalls müsste man das auch direkt als einfacher Programmierer mit der API hinbekommen, oder?

Theoretisch ja, aber du müsstest sehr viel von dem selbst implementieren, was für WMI bereits vorhanden ist. Denn die Bibliotheken für WMI kannst du dann ja auch nicht nutzen, wenn du ohne WMI auskommen willst.

Zudem wäre das dann teilweise nicht identisch je nach Windowsversion bzw. BIOS. All das müsstest du dann selbst basteln.

Ich sehe darin zwar keinerlei Sinn, aber wenn du dir die Arbeit machen willst, dann kannst du das natürlich versuchen. Wie du von den Treibern bzw. dem BIOS die Informationen abfragst, kann ich dir aber nicht sagen.

Mattze 16. Mär 2009 19:05

Re: Wo ist der Speicher?
 
Hallo,

Zitat:

Das stimmt so nicht...
Das wäre ja dann in meinem Verständnis, der ich ja keine Ahnung habe, was WMI doch wunderbares ist, noch schlimmer.
Also nutzt MS dabei Dinge, die es nicht-MS-Programmierern vorenthält.
Und damit wären wir dann bei den MS-Hassern - zu denen ich NICHT zähle.

Aber, ich möchte darüber nicht diskutieren. Jeder hat nun mal seine Interessen und Vorlieben und Nachlieben und und und...


Gruß
Mattze


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:29 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