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;
}

Antworten auf die Frage(8)

Ihre Antwort auf die Frage