Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ramauslastung (bei ramgrößen >2gb) (https://www.delphipraxis.net/69805-ramauslastung-bei-ramgroessen-2gb.html)

himitsu 20. Mai 2006 12:03

Re: Ramauslastung (bei ramgrößen >2gb)
 
Das sollte nicht geschehen, denn du kannst ja auch ein Pogramm, welches für <2 GB compiliert wurde auf einem System, mit weniger als 1 GB, laufen lassen ;)

Es kommen aber nicht alle Codes mit Pointern über 2GB klar ... du mußt also auch aufpassen, daß alle in deinem Programm (importierte Funktionen, geladene DLLs ...) auch dieses kann, wenn du diese Option aktivierst.

Olli 20. Mai 2006 12:34

Re: Ramauslastung (bei ramgrößen >2gb)
 
Pointer sind ja nur 32bit-Werte (auf einem 32bit-System). Sie können also theoretisch wie vorzeichenbehaftete oder vorzeichenlose Integer behandeltwerden, also wir LongInt vs. LongWord um beim Delphi-Jargon zu bleiben.

Das höchste Bit in diesem vorzeichenbehafteten Integer wird bei der Methode "two's complement" immer 1 sein, wenn der Wert negativ ist. Bei positiven Werten ist das höchste Bit immer 0. Wenn wir uns den Wert anschauen, der bei 32bit die Bitmaske des höchsten Bits darstellt, nämlich $80000000, sollte uns etwas auffallen - das ist genau unsere 2GB Grenze.

Wie es scheint, benutzt Delphi also vorzeichenbehaftete Pointerwerte "by default", was sich aber umstellen läßt (wußte ich z.B. auch nicht, danke himitsu!).

easteregg 20. Mai 2006 12:38

Re: Ramauslastung (bei ramgrößen >2gb)
 
Zitat:

Zitat von himitsu

Es kommen aber nicht alle Codes mit Pointern über 2GB klar ... du mußt also auch aufpassen, daß alle in deinem Programm (importierte Funktionen, geladene DLLs ...) auch dieses kann, wenn du diese Option aktivierst.

aber das ist ja nur relevant wenn mein programm soviel ram verbraucht oder?
(irgendwie ist das thema grad nen bömischer wald für mich ;) )

himitsu 20. Mai 2006 12:51

Re: Ramauslastung (bei ramgrößen >2gb)
 
Zitat:

Zitat von easteregg
aber das ist ja nur relevant wenn mein programm soviel ram verbraucht oder?
(irgendwie ist das thema grad nen bömischer wald für mich ;) )

Nein, ist es nicht, da die meisen MemoryManager (DelphiMM/FastMM/FastXMM...) speicher oben und unten im virtuellen Raum ablegen ... so werden z.B. bei Fast(X)MM alle kleinen/mittleren Speicherblöcke unten (Richtung nil) und die großen Blöcke oben reserviert, wärend in der Mitte/hinten/ die ganzen DLL's gemappt sind ... also in der Mitte sieht's meistens recht lehr auch und vorn/hinten mehr voll.
(vorn/mitte/hinten auf die 2 GB bezogen)

easteregg 20. Mai 2006 12:54

Re: Ramauslastung (bei ramgrößen >2gb)
 
also wenn ich zb später mal diesen hook mit einbauen will, das ich die tastenanschläge zähle (nicht auslese!) muss ich bei der dll dann auch diese anweisung mit einbauen, das er mehr als 2gb ram nutzt und sonst kommt es zu probleme - right?

Olli 20. Mai 2006 12:57

Re: Ramauslastung (bei ramgrößen >2gb)
 
Nein, wozu?!

easteregg 20. Mai 2006 12:59

Re: Ramauslastung (bei ramgrößen >2gb)
 
dann hab ich das hier falsch verstanden:

Zitat:

Zitat von himitsu
Es kommen aber nicht alle Codes mit Pointern über 2GB klar ... du mußt also auch aufpassen, daß alle in deinem Programm (importierte Funktionen, geladene DLLs ...) auch dieses kann, wenn du diese Option aktivierst.


himitsu 20. Mai 2006 13:01

Re: Ramauslastung (bei ramgrößen >2gb)
 
Ich denk/hoffe mal nicht, da die DLL ja ihren Speicher auch selber verwaltet (meistens).

Aber wozu willst du dieses Flag überhaupt setzten?
Es kommt ja nicht gerade oft vor, daß ein Programm überhaupt mal den 2 GB-Adressraum voll ausnutzt.

Na gut, ich hatte mal in 'nem Testprogramm "virtuell" die 2 GB vollgemacht und das bei nur 0,7 GB RAM+PageFile, aber dat war ja och nur 'ne Ausnahme ._.

[add]
es muß nicht aktiviert sein ... die DLL muß es nur verstehen/behandeln können, wenn sie mal auf speicher deiner EXE zugreift.

easteregg 20. Mai 2006 13:13

Re: Ramauslastung (bei ramgrößen >2gb)
 
ich brauch gar nichtsoviel ram, ich will ja nur die auslastung auslesen! (minimiert brauch mein programm unter einem MB ;) )

das brauch ich für mein tool (siehe signatur ;) ) - und da gestern mein server kaputt gegangen ist, hab ich seinen ram mit in meine workstation gebaut und komme so auf 2,5gb, und da ist mir der fehler aufgefallen!

himitsu 20. Mai 2006 13:24

Re: Ramauslastung (bei ramgrößen >2gb)
 
aber dafür brauchst du dieses Fläg doch nicht :zwinker:

Delphi-Quellcode:
var
  memory: TMemoryStatus;
begin
  memory.dwLength := SizeOf(memory);
  GlobalMemoryStatus(memory);
  memtotal := Cardinal(memory.dwTotalPhys) / 1024 / 1024;
  memavail := Cardinal(memory.dwAvailPhys) / 1024 / 1024;
  memused := Cardinal(memory.dwMemoryLoad) / 1024 / 1024;


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

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