Frage

Ich lese Windows über C / C ++ . Und ich frage mich nur, eine große Datei in dem Speicher abgebildet werden kann.

Wenn wir eine Anwendung ausführen, eine PE-Datei ihre Prozess-Adresse zugeordnet wird (Benutzer-Partition).

In 32bit Windows, eine große Datei (größer als 2 GB) an Benutzer-Partition geladen werden? oder es wird nicht bestanden?
Wenn es möglich ist, wird die Auslagerungsdatei Hilfe des Laden?

War es hilfreich?

Lösung

Sie werden nicht auf 32-Bit-Windows-fähig sein zu tun. Jedes Programm läuft, dass das tun will, wird bei mindestens 3 Module geladen:

  • ntdll.dll
  • kernel32.dll
  • yourApplication.exe

yourApplication.exe durch Standardlast bei 0x00400000.exe wird, obwohl Sie diese Adresse ändern. ntdll.dll und kernel32.dll wird im hohen 0x7Dxx0000 Bereich an ihren üblichen Ladeadressen geladen werden.

Unter Vista und späteren Systemen der obige Absatz Betrieb ist nicht wahr, wie die Ladeadressen randomisiert werden, aber der DLLs noch in dem ersten 2 GB Speichern an ihrer eigenen Adresse vorhanden sein.

So werden Sie nicht genügend zusammenhängender Raum überall Ihre außergewöhnlich große PE-Datei zu laden, auch wenn Sie Windows mit der Option / 3GB starten.

Wenn Sie eine gute Vorstellung davon, wo die verschiedenen DLLs geladen werden, verwenden Sie VMValidator (kostenlos), um den Adressraum der App sichtbar zu machen. Die Virtual Memory-Ansicht zeigt Ihnen eine grafische Darstellung (1 Pixel pro 4Kb Seite) des Speichers. Die Seiten und Absatz Ansichten zeigen Ihnen den aktuellen Virtual Memory Status jeder Speicherseite und Speicher Absatz.

Für Windows 64 Bit, Sie in der Lage sein können, eine 2GB 64-Bit-PE-Datei zu laden - es sollte sicherlich enopugh zusammenhängender Raum sein, damit es in dem Speicher zu laden. Als ob es dann funktionieren würde, kann ich nicht sagen, werden Sie es testen.

Andere Tipps

Nein, Sie können nicht -. Sie werden Ihren VA Raum erschöpfen, unabhängig von der Auslagerungsdatei Einstellung

Ich glaube nicht, die gesamte Datei zugeordnet ist, nur bis zur Größe der ausführbaren Bild (wie im PE-Header aufgeführt). So ein selbstextrahierende Archiv> 2GB möglich sein. Der Code würde die Standard-Datei verwenden I / O seine Daten aus dem letzten Teil der Datei zu extrahieren, nach dem Ende des PE-Bildes.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top