Ich habe gelesen, dass 32-Bit-Windows-Anwendungen auf 2 GB RAM beschränkt sind, weil die oberen 2 GB Adressraum für das Windows-Betriebssystem (und IIRC, VRAM) reserviert ist. Wenn Sie das Flag / 3GB auf 32-Bit WinXp verwenden, können Sie bis zu 3 GB RAM für die Adressierung zur Verfügung stellen, aber normalerweise müssen Sie mit Benutzerva-Werten optimieren. Ich habe gehört, dass es bei 64-Bit-Editionen von Windows mit einem großen Adress-Flag im PE-Header und über 4 GB RAM möglich ist, dass eine Anwendung alle 4 GB Adressraum für ihre eigene Speicherverwaltung verwendet / p>
Auf der anderen Seite bin ich mir ziemlich sicher, dass Sie beim Aufruf der Windows-API Speicherorte innerhalb des 32-Bit-Adressraums aufrufen müssen, den Sie bereitstellen. Wie viel RAM kann also eine 32-Bit große, adressenbewusste Anwendung in einer 64-Bit-Umgebung wirklich nutzen? Und warum?
Danke.
Der virtuelle Adressraum ist auf 4 GB erweitert. Wenn Sie nicht die Adressfenstererweiterungs-API verwenden, wird die Die maximale Speicherkapazität, auf die Sie zugreifen können, beträgt 4 GB. Ein Teil dieses Speicherplatzes wird vom Betriebssystem für .dlls und andere solche Dinge benötigt, aber es ist möglich, dass Sie Speicher zurückbekommen, der alle 32 Bits eines Zeigers verwendet.
Übrigens, wenn Sie keine große Adresse kennen, werden alle Speicherzeiger nicht negativ, wenn sie in INT_PTR
umgewandelt werden. Dies ist tatsächlich eine Quelle von mehr als ein paar subtilen Fehlern, wenn das Flag für große Adressen verwendet wird, da Zeiger mit vorzeichenbehafteten Werten behandelt werden.
Tags und Links memory-management winapi 32bit-64bit portable-executable