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?
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: Ссылка
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:
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.