Jeg har foelgende kode der skal skrive et int array til en fil og efterfoelgende mmape det. Problemet er at i whileloekken til sidst faar jeg lagersegmenteringsfejl. Er der nogen der har forslag til hvad der kan vaere galt?
n = 110000000; d = 1024; r = 2000000; for (i = 0; i < n; i++) { k = (i + d) % n; fwrite(&k, sizeof(int), 1, fp); }
fd = open("/tmp/memmap", O_RDWR, 0); int *theArray = (int *) mmap(NULL, n, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
Jeg starter jo med at initialisere arrayet så hver indgang i indeholder (i + d) % n. Så når jeg starter med i = 0 sætter jeg første gang i til d, dernæst til 2d, så til 3d etc. Ideen med programmet er at finde blokstørrelsen data bliver læst ind i hukommelsen fra harddisken med. Når jeg finder det rette d vil jeg fra udførelsestiden kunne se at jeg hver gang jeg tilgår en ny indgang skal tilgå en ny blok.
Andet argument til mmap er antal bytes ikke antal ints, brug n*sizeof(int) istedet.
The mmap function asks to map length bytes starting at offset offset from the file (or other object) specified by the file descriptor fd into memory, preferably at address start. This latter address is a hint only, and is usually specified as 0. The actual place where the object is mapped is returned by mmap, and is never 0.
arne_v > det tror jeg ikke - og hvis det skulle ske er det meget længe siden..
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.