This shows you the differences between two versions of the page.
sd-ca:teme:tema1-2024 [2024/03/22 14:51] maria.sfiraiala |
sd-ca:teme:tema1-2024 [2024/03/27 21:24] (current) maria.sfiraiala [Actualizări] |
||
---|---|---|---|
Line 13: | Line 13: | ||
* Eliminare mesaj de eroare INVALID_COMMAND: **22.03.2024** | * Eliminare mesaj de eroare INVALID_COMMAND: **22.03.2024** | ||
+ | * Publicare checker: **22.03.2024** | ||
+ | * Update checker: **26.03.2024** | ||
+ | * Mențiune privind obligativitatea eliminării blocurilor la alocare din vectorul de liste: **27.03.2024** | ||
===== Obiective ===== | ===== Obiective ===== | ||
Line 53: | Line 55: | ||
- Adresele din heap vor fi în intervalul [heap_base, heap_base + heap_size). | - Adresele din heap vor fi în intervalul [heap_base, heap_base + heap_size). | ||
* Parametrul <tip_reconsituire> va fi relevant pentru cerința FREE, găsiți mai multe detalii la secțiunea acesteia. | * Parametrul <tip_reconsituire> va fi relevant pentru cerința FREE, găsiți mai multe detalii la secțiunea acesteia. | ||
+ | |||
+ | <note> | ||
+ | <adresă_start_heap> reprezintă un număr pozitiv, nenul. | ||
+ | </note> | ||
<note> | <note> | ||
Line 214: | Line 220: | ||
<code> | <code> | ||
Fie situația în care avem un singur bloc liber, de dimensiune 16 bytes, | Fie situația în care avem un singur bloc liber, de dimensiune 16 bytes, | ||
- | care începe de la adresa 0x0. | + | care începe de la adresa 0x1. |
MALLOC 6 | MALLOC 6 | ||
---> Se fragmentează blocul de 16 bytes într-o parte de 6 bytes | ---> Se fragmentează blocul de 16 bytes într-o parte de 6 bytes | ||
ce va fi alocată și o parte de 10 bytes ce rămâne liberă | ce va fi alocată și o parte de 10 bytes ce rămâne liberă | ||
- | Se întoarce adresa 0x0. | + | Se întoarce adresa 0x1. |
MALLOC 5 | MALLOC 5 | ||
---> Se fragmentează blocul de 10 bytes într-o parte de 5 bytes | ---> Se fragmentează blocul de 10 bytes într-o parte de 5 bytes | ||
ce va fi alocată și o parte de 5 bytes ce rămâne liberă | ce va fi alocată și o parte de 5 bytes ce rămâne liberă | ||
- | Se întoarce adresa 0x6. | + | Se întoarce adresa 0x7. |
- | FREE 0x6 | + | FREE 0x7 |
---> Se alipește fragmentul de 5 bytes cu fragmentul liber de | ---> Se alipește fragmentul de 5 bytes cu fragmentul liber de | ||
5 bytes. | 5 bytes. | ||
Rezultă un bloc de dimensiune 10 bytes. | Rezultă un bloc de dimensiune 10 bytes. | ||
- | FREE 0x0 | + | FREE 0x1 |
---> Se alipește fragmentul de 6 bytes cu fragmentul liber de | ---> Se alipește fragmentul de 6 bytes cu fragmentul liber de | ||
10 bytes. | 10 bytes. | ||
Line 238: | Line 244: | ||
<code> | <code> | ||
Fie situația în care avem un singur bloc liber, de dimensiune 16 bytes, | Fie situația în care avem un singur bloc liber, de dimensiune 16 bytes, | ||
- | care începe de la adresa 0x0. | + | care începe de la adresa 0x1. |
MALLOC 6 | MALLOC 6 | ||
---> Se fragmentează blocul de 16 bytes într-o parte de 6 bytes | ---> Se fragmentează blocul de 16 bytes într-o parte de 6 bytes | ||
ce va fi alocată și o parte de 10 bytes ce rămâne liberă | ce va fi alocată și o parte de 10 bytes ce rămâne liberă | ||
- | Se întoarce adresa 0x0. | + | Se întoarce adresa 0x1. |
MALLOC 5 | MALLOC 5 | ||
---> Se fragmentează blocul de 10 bytes într-o parte de 5 bytes | ---> Se fragmentează blocul de 10 bytes într-o parte de 5 bytes | ||
ce va fi alocată și o parte de 5 bytes ce rămâne liberă | ce va fi alocată și o parte de 5 bytes ce rămâne liberă | ||
- | Se întoarce adresa 0x6. | + | Se întoarce adresa 0x7. |
- | FREE 0x0 | + | FREE 0x1 |
---> Se creează un bloc nou de dimensiune 6 bytes. | ---> Se creează un bloc nou de dimensiune 6 bytes. | ||
Există 2 liste cu câte un bloc fiecare, unul de 5 bytes și unul de 6 bytes. | Există 2 liste cu câte un bloc fiecare, unul de 5 bytes și unul de 6 bytes. | ||
- | FREE 0x6 | + | FREE 0x7 |
---> Se alipește fragmentul de 5 bytes cu fragmentele de 5 și 6 bytes. | ---> Se alipește fragmentul de 5 bytes cu fragmentele de 5 și 6 bytes. | ||
Există o singură listă, cu un singur bloc, de dimensiune 16 | Există o singură listă, cu un singur bloc, de dimensiune 16 | ||
Line 279: | Line 285: | ||
<note warning> | <note warning> | ||
- | * Este **obligatorie** construirea unei implementări care folosește conceptul de vector de liste. | + | * Este **obligatorie** construirea unei implementări care folosește conceptul de **vector de liste dublu înlănțuite**. |
+ | |||
+ | * Este **obligatoriu** să realizați eliminarea blocurilor din vectorul de liste atunci când acestea sunt alocate. | ||
* Nerespectarea acestor constrângeri va conduce la **notarea temei cu 0 puncte**. | * Nerespectarea acestor constrângeri va conduce la **notarea temei cu 0 puncte**. | ||
Line 287: | Line 295: | ||
===== Checker ===== | ===== Checker ===== | ||
- | **TBD** | + | Arhivă checker: {{:sd-ca:teme:sfl_checker.zip|}} |
+ | |||
+ | <note> | ||
+ | Pentru a utiliza checker-ul: | ||
+ | * Dezarhivați fișierul .zip în folderul in care se află implementarea voastră. | ||
+ | * Asigurați-vă că Makefile-ul vostru conține regulile **build**, **run_sfl** și **clean**. | ||
+ | * Rulați folosind comanda "./check". | ||
+ | </note> | ||
+ | |||
+ | Temele vor fi trimise pe Moodle. | ||
+ | Arhiva trebuie sa contina: | ||
+ | * sursele **.c si .h** | ||
+ | * fișier Makefile cu trei reguli: | ||
+ | * regula **build**: în urma căreia se genereaza un executabil numit **sfl** | ||
+ | * regula **run_sfl**: în urma căreia va rula executabilul **sfl** | ||
+ | * regula **clean** care șterge executabilul și fișierele obiect | ||
+ | * Compilarea trebuie să se realizeze cu flagurile **-Wall -Wextra -std=c99** | ||
+ | * fișier **README** care să conțină detalii despre implementarea temei. |