Difference between revisions of "LU-LSP-b11:L07"
(New page: ===Praktiskais darbs #7 - atmiņas alokācija === 1. Uzrakstīt programmu, ka alocē atmiņu (drīkst to pēc tam neatbrīvot). Par pamatu var izmantot šo skeletu: #include <stdio.h> ...) |
m (typos) |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
===Praktiskais darbs #7 - atmiņas alokācija === |
===Praktiskais darbs #7 - atmiņas alokācija === |
||
1. Uzrakstīt programmu, |
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 <stdio.h> |
||
Line 23: | Line 23: | ||
} |
} |
||
2. Eksperimentāli noskaidrot, cik daudz atmiņas iespējams alocēt ''heap'' segmentā (var |
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 "vienā gabalā" (one chunk) |
||
** Atmiņa tiek alocēta pa 1MB lieliem gabaliem (many chunks) |
** Atmiņa tiek alocēta pa 1MB lieliem gabaliem (many chunks) |
||
Line 44: | Line 44: | ||
5. Neobligāts papilduzdevums. Pieņemsim, ka kodā ir definēta konstante MAX_MEM_SIZE. Ierobežot programmas tālākajā izpildes gaitā maksimāli alocēto atmiņas apjomu ar šo konstanti. |
5. Neobligāts papilduzdevums. Pieņemsim, ka kodā ir definēta konstante MAX_MEM_SIZE. Ierobežot programmas tālākajā izpildes gaitā maksimāli alocēto atmiņas apjomu ar šo konstanti. |
||
==== 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". |
Latest revision as of 16:06, 18 October 2011
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> #define SIZE ... #define ALLOC(size) ... #define FILL(ptr) ... 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)
- 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"?
5. Neobligāts papilduzdevums. Pieņemsim, ka kodā ir definēta konstante MAX_MEM_SIZE. Ierobežot programmas tālākajā izpildes gaitā maksimāli alocēto atmiņas apjomu ar šo konstanti.
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".