LU-LSP-b11:L07

From DiLab
Revision as of 14:14, 18 October 2011 by Atis (talk | contribs)
Jump to: navigation, search

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>
#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 lieto 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".