ich eine Probe C-Programm geschrieben:Null großen Fehler, wenn mmap eine große Datei in c
Programm: für eine große Datei in c
#include<stdio.h>
#include<stdlib.h>
#include <unistd.h>
#include<time.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/mman.h>
#include<inttypes.h>
int main()
{
int fd;
char *data;
fd = open("file.txt", O_RDWR);
int pagesize = getpagesize();
data = mmap((caddr_t)0, pagesize, PROT_READ, MAP_SHARED, fd, pagesize);
srand(time(NULL));
while(1)
{
int r = (rand() % 9999) + 1;
char x = data[r];
}
return 0;
}
ich tue "mmap" (welche Größe hat von 11GiB). Wenn ich dieses Programm kompiliere und versuche, wichtige Seitenfehler mit perf zu überprüfen, bekomme ich null.
Perf Befehl:
perf stat -e major-faults ./test
ich dieses Programm für etwa 30 Sekunden laufen haben und versucht Reihe von großen Seitenfehler von perf gemeldet zu töten, ist gleich Null. Größe meines physischen Gedächtnisses ist 8GiB.
Auch wenn ich eine sehr große Zufallszahl anstelle von 9999 verwende, bekomme ich einen Segmentierungsfehler.
Kann mir bitte jemand vorschlagen, was mache ich hier falsch.