Sag mal, wenn ich eine große Datei, die ich in den virtuellen Adressraum meines Prozesslandkarte als solche:Klärung, wie virtuelle Speichermanager in Windows holt Speicher gemappt Dateidaten
//Error handling is omitted for brevity
HANDLE hFile = CreateFile(L"path-to\\file",
GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
char* pAddress = (char*)MapViewOfFile(hFileMapping,
FILE_MAP_READ, 0, 0, 0);
//And get the data
char data_byte = pAddress[offset];
//Then remember to do the cleanup ....
Wann wird die virtuelle Kernel Speichermanager lasen die aktuellen Daten aus der Datei auf der Festplatte (oder führen die I/O-Operation die Daten von der Festplatte zu holen):
A) Wenn MapViewOfFile
genannt wird, oder
B), wenn I zugreifen es mit pAddress[offset]
?
Und eine zweite Frage, ob die Antwort oben B ist - wenn er holt sich die Daten:
C) Ist es die gesamte Datei lesen oder
D) Nur die Umgreifen Seite (4K Größe, oder so)?
Antwort - B und D – RbMm