LU-LSP-b13:L06

From DiLab
Revision as of 17:20, 29 October 2013 by Atis (talk | contribs) (New page: ===Praktiskais darbs #6 - atmiņas rezervācija === 1. Uzrakstīt programmu, kas rezervē atmiņu (drīkst to pēc tam neatbrīvot). Par pamatu var izmantot šo skeletu: #include <stdio...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Praktiskais darbs #6 - atmiņas rezervācija

1. Uzrakstīt programmu, kas rezervē 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 rezervēt heap segmentā (var lietot malloc()). Salīdziniet - vai un kā šis apjoms mainās, ja:

    • Atmiņa tiek rezervēta "vienā gabalā" (one chunk)
    • Atmiņa tiek rezervēta pa 1MB lieliem gabaliem (many chunks)
  • Secinājumi?

3. Salīdziniet programmu ātrdarbību:

    • 1. variants - atmiņa tiek rezervēta, bet netiek izmantota.
    • 2. variants - atmiņa tiek rezervēta un tiek izmantota (piemēram, aizpildīta ar 0, izmantojot memset() funkciju)
  • Salīdziniet uz 100MB atmiņas rezervāciju. Ieteicams izpildes laika novērtēšanai izmantot programmu "time".

Izmantojot proc failusistēmu, novērtējiet (1) kopējās rezervē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 rezervēt stekā. Padoms - atmiņas rezervā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".