/ / Welche Einschränkungen bei der benutzerdefinierten Speicherverwaltung gibt es in win32? - Fenster, API, Winapi, Speicher, Montage

Welche Einschränkungen für die benutzerdefinierte Speicherverwaltung gibt es in win32? - Windows, API, WinAPI, Speicher, Montage

Der adressierbare Speicherplatz in einem 32-Bit-Programm beträgt also 4 Gigabyte. In einer 64-Bit-Anwendung gibt es ca. 18 Exabyte an adressierbaren Speicherplatz.

Die API kernel32.dll verfügt über verschiedene Methoden bezüglich des Heapspeichers und / oder des Speichers des Programms.

Mein aktuelles Verständnis ist das zum BeispielWenn Sie HeapAlloc aufrufen und die Speichermenge übergeben, die Sie zuordnen müssen, wird ein Zeiger auf die Adresse dieses zugewiesenen Speicherplatzes zurückgegeben ...

Der Vorteil der Verwendung der win32-api-Funktionen besteht nun offensichtlich darin, dass Windows am besten weiß, wo andere Komponenten wie geladene DLLs abgelegt werden. Deshalb frage ich...

Gibt es eine feste Position im Speicher für DLL-Dateien? Ich denke, ich habe irgendwo gelesen, dass es sich bei 32-Bit im Allgemeinen um die obere Hälfte des Speicherplatzes handelt (0x80000000 und höher).

Ist es nicht möglich, einfach Zeiger auf einen Speicher frei zu verwenden, ohne dass Windows es zuvor zugewiesen hat? Was wären die Nebenwirkungen?

Ich bin zu diesem Thema semi-neu, also werden jegliche Hilfe oder Hinweise geschätzt! =)

Antworten:

6 für die Antwort № 1

Ist es nicht möglich, einfach Zeiger auf einen Speicher frei zu verwenden, ohne dass Windows es zuvor zugewiesen hat? Was wären die Nebenwirkungen?

Die Nebenwirkungen sind einfach: Ihre Anwendung würde abstürzen.

Windows (und jedes andere normale Betriebssystem) verwendet virtuelleSpeicher: Das Betriebssystem ordnet dem physischen Speicher den virtuellen Adressraum zu, den Ihr Prozess sieht. Und es führt dieses Mapping auf Anforderung durch: Wenn Sie es bitten, einen Speicherblock zuzuordnen, ordnet es einen entsprechenden Bereich von virtuellen Speicheradressen einem gültigen Speicherbereich zu.

Schreiben auf eine beliebige Adresse bedeutet, dass Sie eine Speicherseite aufrufen, die vom Betriebssystem keinem Backing-Speicher zugeordnet wurde. Anschließend wird eine Zugriffsverletzung (oder ein Segmentierungsfehler bei * nix)

Gibt es eine feste Position im Speicher für DLL-Dateien?

Nee. Wie könnte es sein Wenn du hättest ein DLL-Datei könnte es sein. Was ist, wenn Ihre Anwendung zwei DLLs lädt? Was ist, wenn es 40 lädt? 400? Und jede DLL hat eine andere Größe. Wenn sie an festen Speicherorten geladen wurden, könnten sie sich überschneiden.

Darüber hinaus führen neuere Versionen von Windows die Adressraum-Randomisierung durch: Um bestimmte Sicherheitsanfälligkeiten zu verringern, versucht Windows sicherzustellen, dass DLLs und ausführbare Dateien geladen werden anders Standorte, wenn Sie die Anwendung mehrmals starten.

Kurz gesagt: Ihr Prozess läuft unter Windows. Es ist ein Windows-Bürger und muss die Windows-Gesetze einhalten. Wenn auf eine Ressource (einschließlich, aber nicht beschränkt auf Speicher) zugegriffen werden muss, muss Windows von Windows aufgefordert werden, diese Ressource verfügbar zu machen.