AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi RAM, virtuelle Adressierung, Auslagerungsdatei - reservieren
Thema durchsuchen
Ansicht
Themen-Optionen

RAM, virtuelle Adressierung, Auslagerungsdatei - reservieren

Ein Thema von Puhbaehr · begonnen am 7. Jun 2007 · letzter Beitrag vom 7. Jun 2007
Antwort Antwort
Puhbaehr
(Gast)

n/a Beiträge
 
#1

RAM, virtuelle Adressierung, Auslagerungsdatei - reservieren

  Alt 7. Jun 2007, 13:11
Hallo DPler,

ich kenne den Unterschied zwischen physischem RAM, dessen virtuellen Speicheradressierung und dem virtuellen Speicher - der Auslagerungsdatei.
Ich nahm bisher an, dass der Taskmanger unter "virtueller Speicher" mir den Speicherverbrauch der Auslagerungsdatei zeigt.
In einem Programm wollte ich reelen Speicher anfordern (hab mit LocalAlloc und dyn./stat. Arrays rumprobiert). Aber im Taskmanger wurde nicht wie erwartet unter der Spalte "Speichernutzung" ein erhöhter Bedarf festgestellt sondern stattdessen in der Spalte "virtueller Speicher".

D.h. meine Daten liegen nun in der Auslagerungsdatei? Wie kann man das richtig verstehen?

Der Speicheroptimierer von TuneUp zeigt auch die Speichernutzung des physischen Speichers. Laut diesem werden die dyn. und stat. Arrays im physischem Speicher abgelegt. Die Speicherreservierung von LocalAlloc verschwindet eindeutig in der Auslagerugnsdatei.

Mit welchen Funktionen kann man vernünftig und schnell Speicher reservieren der sich auch tatsächlich im RAM befindet? Ich benötige für das Programm mehrere kleinere Speicherblöcke in denen ich Dateien von der Festplatte einlesen kann. Die Daten sollen dabei möglichst schnell greifbar für den Prozessor liegen damit dieser später schnell auf die Daten zugreifen und allesamt hintereinander ausführen kann.
Laut PSDK ist LocalAlloc langsamer. Ich denke mir wegen der Auslagerung.
Laut DP lassen sich mit VirtualAlloc nur größere Speicherbereiche reservieren und damit nicht allzuviele.

Andersrum: Gibt es auch Funktionen mit denen ich explizit festlegen kann "bitte in der Auslagerungsdatei reservieren". Ich möchte "unwichtige" Sachen wie Benutzereinstellungen nicht in den knappen RAM ablegen.

In einigen Beiträgen hab ich über Delphi-Funktionen wie GetMem gelesen die aber bei erst wieder mit dem Beenden des Programmes für Windows freigegeben werden. Da wurde auf die Windows-Funktionen (VirtualAlloc, LocalAlloc) hin verwiesen.

Ich wäre für ein paar Tipps dankbar.

Gruß,
Robert

EDIT: Ich werde auf VirtualAlloc zurückgreifen und in einem großen Speicherbereich mehrere Dateien ablegen und einfach auf die Blöcke referenzieren. Mal schauen ob das was wird.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#2

Re: RAM, virtuelle Adressierung, Auslagerungsdatei - reservi

  Alt 7. Jun 2007, 13:53
Vielleicht solltest du dich einfach gar nicht um diese Probleme kümmern? Ich meine, das Betriebssystem kriegt schon halbwegs mit, wenn Speicherbereiche wenig oder gar nicht benutzt werden und lagert sie aus, und umgekehrt. Nutzt du einen bestimmten Speicherbereich häufig, wird er auch nicht ausgelagert im Normalfall. Ich sehe ehrlich gesagt nicht viel Nutzen darin, Windows diese Arbeit abzunehmen, wenn du nicht gerade einen Treiber programmierst (da hat man ja noch ein paar andere Möglichkeiten). Wenn du wirkliclh Speicher sparen willst, dann lade die Daten doch erst bei Bedarf in den Speicher und lösche sie anschließend wieder.
Außerdem:
Zitat von Windows SDK:
Note The local functions are slower than other memory management functions and do not provide as many features. Therefore, new applications should use the heap functions.
Ich habe zurzeit keinen XP-Taskmanager im Zugriff (im Vista-Taskmanager heißen die Spalten alle anders), aber ich meine mich erinnern zu können, dass unter "Virtueller Speicher" die gesamte Speichernutzung des Programms angegeben wird, also physikalischer und ausgelagerter zusammen.

Edit roter Kasten: Ich poste trotzdem mal, mit dieser Ergänzung:
Dokumentation zu VirtualAlloc:
Zitat:
The VirtualAlloc function reserves or commits a region of pages in the virtual address space of the calling process. Memory allocated by this function is automatically initialized to zero, unless MEM_RESET is specified.
Virtueller Adressraum heißt nicht unbedingt ausgelagerter Speicher.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: RAM, virtuelle Adressierung, Auslagerungsdatei - reservi

  Alt 7. Jun 2007, 14:22
Der virtuelle Speicher ist der Adressraum deines Prozesses. Jeder Prozess hat 4 GB (2 GB für den Prozess nutzbar) an Adressraum zur Verfügung. Dies ergibt sich aus der Breite des Adressbusses von 32-Bit. Da aber der Hauptspeicher kleiner ist, werden die 4 GB virtuell abgebildet. Und erst wenn der tatsächliche Zugriff erfolgt, wird der Inhalt an den benötigten Adressen physisch der CPU um Hauptspeicher zur Verfügung gestellt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#4

Re: RAM, virtuelle Adressierung, Auslagerungsdatei - reservi

  Alt 7. Jun 2007, 15:02
Nunja, mit VirtualAlloc bin ich weiter. VirtualAlloc reserviert tatsächlich Speicher im RAM. Ich hatte ganz zu Anfangs bei meiner Suche diese Funktion im Blick. Hab mich aber durch den irreführenden Funktions-Namen davon abbringen lassen ohne mir den Text vorher durchzulesen. Denn die Auslagerungsdatei ist nunmal als virtueller Arbeitsspeicher bekannt.
Nun hab ich hier noch Probleme größere Adressräume zu reservieren. Aber das ist ein anderes Problem.

---

zu Luckie:

Dass die virtuelle Adressierung für jeden Prozess gilt und es Begrenzungen wegen der 32-Bit gibt war mir soweit bekannt. Ich dachte nur, dass im Taskmanager ersichtlich ist welche Art von Speicher ein Prozess benutzt.
Jetzt wo du es sagst ist dann wohl "virtueller Speicher" die angeforderte Speicherreservierung eines Prozesses und "Speichernutzung" die tatsächliche Nutzung.

Findet man noch irgendwo gute Dokus zum Thema Speicher und deren Verwaltung? Mich interessiert im Moment ob die virtuelle Adressierung durch die 64-Bit-Systeme irgendwann wieder außer Kraft gesetzt wird da ja mit 64-Bit nun genügend Speicher adressiert werden kann.

Vielen Dank soweit.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: RAM, virtuelle Adressierung, Auslagerungsdatei - reservi

  Alt 7. Jun 2007, 15:10
Zitat von Puhbaehr:
Mich interessiert im Moment ob die virtuelle Adressierung durch die 64-Bit-Systeme irgendwann wieder außer Kraft gesetzt wird da ja mit 64-Bit nun genügend Speicher adressiert werden kann.
Eher im Gegenteil. Jetzt kann der Adressraum noch größer sein, aber man hat trotzdem nur 1 bis 2 GB Haupptspeicher. Das Konzept der virtuellen Speichers wird es wohl so lange geben, wie es PC geben wird oder so lange es noch keine 100 GB Hauptspeicher gibt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#6

Re: RAM, virtuelle Adressierung, Auslagerungsdatei - reservi

  Alt 7. Jun 2007, 15:11
Zitat:
VirtualAlloc reserviert tatsächlich Speicher im RAM.
Dir ist hoffentlich klar, dass der mit VirtualAlloc reservierte Speicher jederzeit ausgelagert werden kann.
Zitat:
Denn die Auslagerungsdatei ist nunmal als virtueller Arbeitsspeicher bekannt.
Hmm, nö. Mir nicht.
Zitat:
Mich interessiert im Moment ob die virtuelle Adressierung durch die 64-Bit-Systeme irgendwann wieder außer Kraft gesetzt wird da ja mit 64-Bit nun genügend Speicher adressiert werden kann.
Dir scheint das alles noch nicht ganz klar zu sein. Auf einem 64-Bit-System geht es erst recht nicht ohne die virtuelle Adressierung. Nichtmal, wenn du das von Win64 ermöglichte Maximum an RAM erreicht hast, denn das ist immer noch viel weniger als man mit 64 Bit adressieren könnte. Anders gesagt, auch wenn du auf Win64 nur 1GB RAM hast, kann dir das System 4GB reservieren. Dass der Großteil davon in der Auslagerungsdatei liegt, ist an dieser Stelle nicht dein Problem und genau genommen erfährst du das im Normalfall gar nicht. Der Zugriff ist völlig transparent, weil du eine virtuelle Adresse benutzt, um darauf zuzugreifen und keine physikalische.
Lass Windows diese ganze Speichergeschichte erledigen. Wenn du nicht wirklich einen guten Grund (und die nötigen Kenntnisse) hast, da einzugreifen, und den sehe ich bei dir nicht, solltest du es dabei belassen. Spiel mit Windows zusammen und nicht dagegen.

Hmpf, pöser Luckie, sein roter Kasten war schneller als ich
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: RAM, virtuelle Adressierung, Auslagerungsdatei - reservi

  Alt 7. Jun 2007, 17:28
Zitat von ORegonGhost:
wenn du das von Win64 ermöglichte Maximum an RAM erreicht hast
Und selbst wenn, dann starte ich einfach einen weiteren Prozess und schon bin ich wieder drüber
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort


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