Difference between revisions of "LU-LSP-b11:L10"
(New page: == 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īdzi...) |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 4: | Line 4: | ||
2. Salīdzināt dažādus atmiņas alokācijas veidus. Katram veidam izpētīt, |
2. Salīdzināt dažādus atmiņas alokācijas veidus. Katram veidam izpētīt, |
||
# Kāds ir maksimālais atmiņas daudzums, ko tādā veidā var alocēt? |
|||
# Kāds programmas darbības laiks uz max daudzumu? |
|||
Laiku ieteicams mērīt ar programmu time. Lietošana - ja programma saucas pd10, tad |
Laiku ieteicams mērīt ar programmu ''time''. Lietošana - ja programma saucas pd10, tad |
||
$ time ./pd10 |
$ time ./pd10 |
||
Uzrakstīt '''secinājumus''' |
Uzrakstīt '''secinājumus''': savas hipotēzes "kāpēc tā notiek". |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
void *p = malloc(MB); |
void *p = malloc(MB); |
||
if (p == NULL) break; |
if (p == NULL) break; |
||
mmap(): |
|||
void *p = mmap(NULL, MB, PROT_READ|PROT_WRITE, |
void *p = mmap(NULL, MB, PROT_READ|PROT_WRITE, |
||
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); |
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); |
||
if (p == (void *) -1) break; |
if (p == (void *) -1) break; |
||
sbrk(): |
|||
void *p = sbrk(MB); |
void *p = sbrk(MB); |
||
if (p == (void *) -1) break; |
if (p == (void *) -1) break; |
||
3. Izpētīt, kā |
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: |
||
# .text segmenta starta un beigu adreses |
# .text segmenta starta un beigu adreses |
||
# .data segmenta sākuma un beigu adreses |
# .data segmenta sākuma un beigu adreses |
Latest revision as of 14:57, 15 November 2011
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,
- Kāds ir maksimālais atmiņas daudzums, ko tādā veidā var alocēt?
- 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:
- .text segmenta starta un beigu adreses
- .data segmenta sākuma un beigu adreses
- .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".