Kann ein 32-Bit-Prozess mehr Speicher auf einem 64-Bit-Windows-Betriebssystem zugreifen?

8

Soweit ich weiß, kann ein 32-Bit-Prozess nur auf 2 GB Speicher in 32-Bit-Fenstern ohne den Schalter / 3GB zugreifen, und ein Teil dieses Speichers wird vom Betriebssystem aus teuflischen Gründen genutzt. Dies scheint mit meinen Erfahrungen übereinzustimmen, da wir eine App haben, die abstürzt, wenn sie etwa 1,2 bis 1,5 GB RAM mit Ausnahmebedürfnissen aus dem Speicher erreicht, obwohl noch genügend Speicher verfügbar ist.

Meine Frage ist, würde das Verschieben dieser 32-Bit-App auf 64-Bit-Fenster mehr als 1,5 GB Speicher erlauben, so dass es jetzt möglich ist? Oder müsste die App selbst auf 64bit aufgerüstet werden?

    
Ely 20.02.2009, 17:45
quelle

4 Antworten

12

Neuere Versionen von Visual Studio haben ein neues Flag, das 32-Bit-Apps "großen Adressraum bewusst macht". Im Grunde sagt es, wenn es auf eine 64-Bit-Version von Windows geladen wird, dann wird es 4 GB (die Grenze der 32-Bit-Zeiger) bekommen. Dies ist sicherlich besser als die 2 oder 3 GB, die Sie auf 32-Bit-Versionen von Windows erhalten. Siehe Ссылка :

Vor allem heißt es:

  

Begrenzt den Speicher- und Adressraum   variieren je nach Plattform, Betriebssystem,   und ob die   IMAGE_FILE_LARGE_ADDRESS_AWARE-Wert   der Struktur LOADED_IMAGE und   4-Gigabyte-Tuning (4GT) sind in Verwendung.   IMAGE_FILE_LARGE_ADDRESS_AWARE ist festgelegt   oder gelöscht mit dem   / LARGEADDRESSAWARE Linker-Option.

Siehe auch: Ссылка

    
Evan Teran 20.02.2009, 17:54
quelle
4

Ja, unter den richtigen Umständen kann ein 32-Bit-Prozess unter Windows auf volle 4 GB Speicher zugreifen, anstatt auf die 2 GB, auf die er normalerweise beschränkt ist.

Damit dies funktioniert, benötigen Sie Folgendes:

  • Die App muss auf einem 64-Bit-Betriebssystem laufen
  • Die App muss mit dem Flag / LARGEADDRESSAWARE kompiliert werden.
  • Die App sollte getestet werden, um sicherzustellen, dass sie in diesem Fall richtig funktioniert. ;) (insbesondere Code, der auf alle Zeiger angewiesen ist, die auf Adressen unterhalb der 2GB Grenze zeigen, wird hier offensichtlich nicht funktionieren)
jalf 20.02.2009 18:01
quelle
1

Ihre App wird durch die Zeigergröße begrenzt, in Ihrem Beispiel 32 Bit.

Wenn Ihre App auf mehr Speicher zugreifen soll, benötigen Sie eine Art segmentierter Speicherarchitektur wie in den 16-Bit-Tagen, in denen Apps 16-Bit-Zeiger und Offsets für den Zugriff auf den vollen 32-Bit-Speicher verwendeten.

    
chollida 20.02.2009 17:50
quelle
1

WOW64 ermöglicht die Verwendung einer 32-Bit-Windows-Anwendung unter 64-Bit-Windows und die Umsetzung von 32-Bit-Zeigern in echte 64-Bit-Zeigern. Und tatsächlich sollte die 32-Bit-Adressierung den Zugriff auf 4 GB Speicher ermöglichen.

    
vartec 20.02.2009 17:56
quelle

Tags und Links