Ich habe eine C++-Klasse für Windows und Linux geschrieben, die eine speicherabbildende Ansicht für eine Datei beliebiger Größe n erstellt. Der Code für den Klassenkonstruktor kann hier eingesehen werden . Ich teste den Code derzeit unter Windows 32 Bit XP.
Ich habe festgestellt, dass der Konstruktor für die Dateigrößen 0 < n <= 1,7 GB einen gültigen Zeiger auf eine speicherabgebildete Ansicht zurückgibt. Bei einer Dateigröße >= 2 GB gibt MapViewOfFile jedoch einen NULL-Wert und den Fehlercode 8 zurück: "Für die Verarbeitung dieses Befehls ist nicht genügend Speicherplatz verfügbar". Offensichtlich kann Windows keinen verfügbaren Adressraum der Größe 2 GB im Prozess finden.
Daher muss ich möglicherweise den Klassenkonstruktor ändern, um eine Reihe kleinerer speicherabgebildeter Ansichten zu erstellen, die insgesamt >= 2 GB Bytes && < 2 ^ 32 - 1 Bytes umfassen. Die andere Anforderung besteht darin, eine Zuordnung zwischen jeder der kleineren speicherabgebildeten Ansichten und einer Adresse mit zufälligem Zugriff im Adressraum des Prozesses zu erstellen.
Zuvor habe ich den folgenden Code für den wahlfreien Zugriff verwendet:
char* KeyArray;
try {
mmapFile = new cMemoryMappedFile(n);
}
catch (cException e)
{
throw;
}
KeyArray = (char *)(mmapFile->GetPointer());
KeyArray[i] = ...
Wie sollte ich die Klasse ändern, um diese Anforderungen zu erfüllen?
0 Stimmen
Hier ist die Pastebin-Url. <iframe src=" pastebin.com/embed_iframe.php?i=2GX0XHsm " style="border:none;width:100%"></iframe>
0 Stimmen
Hier ist ein funktionierender Link direkt zum Code