LU-LSP-b12:L06
Praktiskais darbs #7 - atmiņas alokācija
1. Uzrakstīt programmu, kas alocē atmiņu (drīkst to pēc tam neatbrīvot). Par pamatu var izmantot šo skeletu:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { printf("allocating...\n"); // ... printf("done\n"); return 0; }
2. Eksperimentāli noskaidrot, cik daudz atmiņas iespējams alocēt heap segmentā (var lietot malloc()
). Salīdziniet - vai un kā šis apjoms mainās, ja:
- Atmiņa tiek alocēta "vienā gabalā" (one chunk)
- Atmiņa tiek alocēta pa 1MB lieliem gabaliem (many chunks)
- Secinājumi?
3. Salīdziniet programmu ātrdarbību:
- 1. variants - atmiņa tiek alocēta, bet netiek izmantota.
- 2. variants - atmiņa tiek alocēta un tiek izmantota (piemēram, aizpildīta ar 0, izmantojot
memset()
funckiju)
- Salīdziniet uz 100MB atmiņas alokāciju. Ieteicams izpildes laika novērtēšanai izmantot programmu "time".
Izmantojot proc failusistēmu, novērtējiet (1) kopējās alocētās virtuālās atmiņas (VmSize), (2) resident set size izmērus (VmRSS) abos gadījumos. Secinājumi?
4. Eksperimentāli noskaidrot, cik daudz atmiņas iespējams alocēt stekā. Padoms - atmiņas alokācijai stekā izmantot funkciju alloca()!
- Kas notiks, ja programmas darbības laikā tiks izsaukta šāda funkcija:
void f() { char array[100 * 1024 * 1024]; memset(array, 0, sizeof(array)); }
- Izskaidrot, kāpēc. Kas mainītos, ja mainīgais array būtu deklarēts kā "static"?
Iesūtīšana
Risinājumus nosūtīt uz kursa asistenta e-pastu, rakstot atbildes vēstules tekstā. E-pasta "Subject" obligāti iekļaut burtus "LSP".