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. | ||