LU-LSP-b11:L10

From DiLab
Revision as of 15:57, 15 November 2011 by Atis (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Praktiskais darbs #10

1. Uzrakstīt programmu, kas alocē atmiņu (drīkst pēc tam neatbrīvot). Uzdevums līdzīgs PD#7, drīkst izmantot tā kodu.

2. Salīdzināt dažādus atmiņas alokācijas veidus. Katram veidam izpētīt,

  1. Kāds ir maksimālais atmiņas daudzums, ko tādā veidā var alocēt?
  2. Kāds programmas darbības laiks uz max daudzumu?

Laiku ieteicams mērīt ar programmu time. Lietošana - ja programma saucas pd10, tad

$ time ./pd10

Uzrakstīt secinājumus: savas hipotēzes "kāpēc tā notiek".

Allocēt atmiņu pa vienam megabaitam (= 1024*1024 baitu). Salīdzināt šādus veidus (doti koda fragmenti):

malloc():

void *p = malloc(MB);
if (p == NULL) break;

mmap():

void *p = mmap(NULL, MB, PROT_READ|PROT_WRITE,
               MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
if (p == (void *) -1) break;

sbrk():

void *p = sbrk(MB);
if (p == (void *) -1) break;

3. Izpētīt, kā uzrakstītajā programmā tiek izmantota atmiņa tās palaišanas brīdī. Ar programmu objdump (argumenti objdump -h ./pd10) statiski noteikt:

  1. .text segmenta starta un beigu adreses
  2. .data segmenta sākuma un beigu adreses
  3. .bss segmenta sākuma un beigu adreses

Iesūtīšana

Iesūtīt kodu uz kursa asistenta e-pastu, faila nosaukums LSP_PD10_Vards_Uzvards.c,

Analīzi iesūtīt vēstules tekstā.

Subject "LSP PD10 Vards Uzvards".