AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Ramauslastung (bei ramgrößen >2gb)
Thema durchsuchen
Ansicht
Themen-Optionen

Ramauslastung (bei ramgrößen >2gb)

Ein Thema von easteregg · begonnen am 20. Mai 2006 · letzter Beitrag vom 25. Mai 2006
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von easteregg
easteregg

Registriert seit: 26. Mär 2005
174 Beiträge
 
#1

Ramauslastung (bei ramgrößen >2gb)

  Alt 20. Mai 2006, 00:07
heyho

da ich grad aufgrund eines rechnercrash mir einen "superrechner" zusammengebaut hab, ist mir aufgefallen das mein programm mit ramgrößen über 2gb nicht umgehen kann.

zur zeit lese ich die auslastung so aus:

Delphi-Quellcode:
var
  memory: TMemoryStatus;
begin
      //mem
       memory.dwLength := SizeOf(memory);
       GlobalMemoryStatus(memory);
        memtotal := memory.dwTotalPhys / 1024 / 1024;
        memavail := memory.dwAvailPhys / 1024 / 1024;
        memused := memory.dwMemoryLoad / 1024 / 1024;
aber das packt nur bis 2gb der rest wird abgeschnippelt.... das find ich nicht toll -> da steht jetzt einfach 0/2048mb da ...
wie kann ich nun die vollen 2,5gb auslesen ?
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

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

  Alt 20. Mai 2006, 00:10
Hm, sind die Zahlen in memory Integers oder DWords, wies dransteht? Wenns DWords sind, müsst das doch gehen..
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#3

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

  Alt 20. Mai 2006, 00:13
JEDES Programm kann mit RAM-Größen über 2GB umgehen, wenn es für 32bit oder größer kompiliert wurde.

Das Problem ist nur, daß die oberen 2GB immer für das System - sprich: den Kernel - reserviert sind. Die Einstellung kannst du über einen BOOT.INI-Switch ändern, so daß 3GB zur Verfügung stehen. Ansonsten hast du da keine Chance.

Achtung, die Einstellung der boot.ini ist abhängig von deinem System. Auf Win9x/Me kannst du sowieso keine >2GB nutzen, also ging ich in meiner Antwort von NT aus!

Nachtrag:
Ach ja, wenn es noch niemandem aufgefallen sein sollte: jeder einzelne Prozeß hat 4GB (gespalten in die 2 Teile für System und User) zur Verfügung. Und dreimal dürft ihr raten, wie das geht wenn ihr z.B. nur 512MB RAM und eine 512MB Auslagerungsdatei habt!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.151 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 20. Mai 2006, 00:16
DerMemoryManager ist auf 2 GB begrenzt, aber man kann zumindestens FastMM (der BorlandMM kann es vrmutlich nicht richtig ... wenn überhaupt, da er eigentlich nicht dafür ausgelegt ist) auf 3 GB Win32 und bis zu 4 GB unter Win64 umstellen

schau dazu mal in die ReadMe > Stichwort "{$SetPEFlags $20}"
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von easteregg
easteregg

Registriert seit: 26. Mär 2005
174 Beiträge
 
#5

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

  Alt 20. Mai 2006, 00:23
also mein winXP prof erkennt ja die 2,5gb einwandfrei!
nur eben mein programm liest nur 2048mb aus.
also liegt das an dem memorymanager von borland?

und zu dem bootini swichtes -> hab ich das richtig verstanden das winXP zb gar nicht mehr als 2gb von den 2,5 nutzen wird/kann ?
ich bin grad etwas überfordert mit den infos
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

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

  Alt 20. Mai 2006, 00:30
Zitat von easteregg:
also liegt das an dem memorymanager von borland?
Denkt doch bitte mal erstmal alle nach. Benutzt wurde zum auslesen eine Funktion namens? Richtig: MSDN-Library durchsuchenGlobalMemoryStatus! Wie der Zufall es will, ist diese Funktion absolut unabhängig vom Borland Memory Manager, weil es sich - wie der Zufall es will - um eine Win32 API-Funktion handelt.

Wenn du die Funktionen von Delphi benutzt um RAM zu allozieren, bist du aber natürlich auf das beschränkt, was Delphi dir anbietet (siehe himitsus Post). Würdest du die üblichen Windows-Funktionen verwenden, solltest du dieses Problem ja nicht haben ... teste es einfach.

Und nochmal: ein Usermode-Programm auf einer StiNo-Installation von Windows kann nicht mehr als 2GB allozieren, weil der Teil ab $80000000 eben dem Kernel gehört. Dort befinden sich (eingeblendet in den Prozeßspeicherraum) eingeblendet beispielsweise MMFs und Shared Sections von DLLs. Alles untendrunter ist sozusagen privat für den Prozeß.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.151 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 20. Mai 2006, 00:35
Egal was dein Windows kann und was da eingestellt ist ... Standardmäßig ist die Größe auf 2 GB begrenzt ... also im positiven Bereich von LongInt.

füg einfach mal {$SetPEFlags $20} in deie DPR ein uns schau was passiert ... entweder der DelphiMM kann es, oder eben nicht
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von easteregg
easteregg

Registriert seit: 26. Mär 2005
174 Beiträge
 
#8

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

  Alt 20. Mai 2006, 00:50
ok das hab ich jetzt einfach ausprobiert und siehe da - es funktioniert.

wieso sind solche optionen nicht von anfang an aktiv?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.151 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 20. Mai 2006, 02:25
Weil es sowas früher nicht gab und man Abwärtskompatibel sein will/muß

bei den 2 GB kann man z.B. ganz einfach prüfen, ob ein Pointer im "gültigen" Bereich ist
also nicht negativ und nicht nil.

Delphi-Quellcode:
// 2 Flags geprüft und fertsch

or &P, &P
js @Fehler
jz @Fehler
Tja und wenn jetzt soeine, oder so 'ne ähnlich Prüfung gemacht wird, dann wird dieses meinen der Pointer wäre falsch, sobald er >= 2 GB liegt ._.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von easteregg
easteregg

Registriert seit: 26. Mär 2005
174 Beiträge
 
#10

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

  Alt 20. Mai 2006, 11:31
ich verstehe das jetzt nicht richtig.

wenn jetzt also das für >2,5gb compilierte programm auf einem systemläuft mit weniger als 2gb kommt es zu problemen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14:00 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