MMAP-Problem, reserviert große Mengen an Speicher
Ich habe einige große Dateien, die ich analysieren muss, und die Leute haben mmap empfohlen, da dies die Zuordnung der gesamten Datei im Arbeitsspeicher vermeiden sollte.
Wenn ich aber nach oben schaue, sieht es so aus, als würde ich die gesamte Datei in den Speicher öffnen, also denke ich, ich muss etwas falsch machen. "Top Shows> 2,1 Gig"
Dies ist ein Codeausschnitt, der zeigt, was ich tue.
Vielen Dank
#include <stdio.h>
#include <stdlib.h>
#include <err.h>
#include <fcntl.h>
#include <sysexits.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <cstring>
int main (int argc, char *argv[] ) {
struct stat sb;
char *p,*q;
//open filedescriptor
int fd = open (argv[1], O_RDONLY);
//initialize a stat for getting the filesize
if (fstat (fd, &sb) == -1) {
perror ("fstat");
return 1;
}
//do the actual mmap, and keep pointer to the first element
p =(char *) mmap (0, sb.st_size, PROT_READ, MAP_SHARED, fd, 0);
q=p;
//something went wrong
if (p == MAP_FAILED) {
perror ("mmap");
return 1;
}
//lets just count the number of lines
size_t numlines=0;
while(*p++!='\0')
if(*p=='\n')
numlines++;
fprintf(stderr,"numlines:%lu\n",numlines);
//unmap it
if (munmap (q, sb.st_size) == -1) {
perror ("munmap");
return 1;
}
if (close (fd) == -1) {
perror ("close");
return 1;
}
return 0;
}