malloc |
Atmiņas iedalīšana |
5 sek. |
Uzrakstiet programmu, kas simulē atmiņas iedalīšanas komandu izpildi!
Atmiņa ir virkne, kas sastāv no 100,000 sekojošām atmiņas vienībām, kas sanumurētas ar
skaitļiem no 1 līdz 100,000. Sākumā visas vienības ir brīvas.
Iespējamās komandas ir:
- var=malloc(size);
Šī funkcija atrod pirmās size (100 ≤ size ≤ 100,000) pēc kārtas sekojošas brīvas
atmiņas vienības un iedala tās. Funkcija atgriež pirmās iedalītās vienības adresi vai arī
skaitli 0, ja atmiņu iedalīt nav iespējams.
- free(var);
Šī funkcija atbrīvo visas mainīgajam var iedalītās atmiņas vienības (pēc komandas
malloc
lietošanas) un uzstāda var vērtību uz 0.
Ja mainīgā var vērtība jau ir 0, tad nekas netiek
darīts.
- print(var);
Šī funkcija izdrukā mainīgā var vērtību.
Mainīgie ir simbolu virknes, kas sastāv no precīzi četriem maziem latīņu alfabēta burtiem.
Dažādu mainīgo skaits nepārsniedz 1000. Visu mainīgo sākuma vērtības vienādas ar 0.
Teksta faila malloc.dat pirmajā rindā dots vesels skaitlis N, 1 ≤ N ≤ 100,000, -
komandu skaits (vismaz viena komanda būs 'print').
Katrā no nākamajām N rindām dota viena komanda. Komandas dotas to izpildes secībā.
Teksta failā malloc.rez jāizvada visu komandu 'print' rezultāti tādā secībā, kādā tās
parādās ievaddatos. Katrs rezultāts jāizvada atsevišķā rindā.
malloc.dat | malloc.rez |
3
mama=malloc(140);
tata=malloc(120);
print(tata);
|
141
|
| |
malloc.dat | malloc.rez |
aabb=malloc(50001);
bbaa=malloc(50000);
print(aabb);
free(aabb);
print(bbaa);
|
1
0
|
| |
malloc.dat | malloc.rez |
5
baka=malloc(214);
baka=malloc(123);
free(baka);
deda=malloc(100);
print(deda);
|
215
|
Uzdevums izmantots Horvātijas informātikas olimpiādē 2004.gadā
Drukāšanai
|