https://github.com/teodutu/memory-allocator
Proiect PC 2017
https://github.com/teodutu/memory-allocator
c memory-allocator
Last synced: 3 months ago
JSON representation
Proiect PC 2017
- Host: GitHub
- URL: https://github.com/teodutu/memory-allocator
- Owner: teodutu
- License: mit
- Created: 2019-02-12T11:15:09.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-02-13T12:41:28.000Z (over 6 years ago)
- Last Synced: 2025-01-30T03:42:31.882Z (5 months ago)
- Topics: c, memory-allocator
- Language: C
- Homepage: https://ocw.cs.pub.ro/courses/programare/teme_2017/proiect_2017_ca
- Size: 165 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Memory-Allocator
Un alocator de memorie simplificat, ce implementeaza urmatoarele functii
## INITIALIZE N
- prima comanda apelata;
- aloca `N` octeti care reprezinta zona de memorie cu care se va lucra.
## FINALIZE
- ultima comanda apelata;
- dealoca acei `N` octeti alocati de `INITIALIZE`.
## DUMP
- afiseaza octetii hartii in format hexazecimal;
- similar cu hexdump.
## ALLOC SIZE
- aloca `SIZE` octeti pe prima pozitie de la stanga la dreapta din arena in care acest lucru este posibil;
- returneaza adresa de inceput a zonei alocate.
## FREE INDEX
- elibereaza memoria ce incepe la pozitia `INDEX`;
- `INDEX` este o pozitie returnata de `ALLOC`.
## FILL INDEX SIZE VALUE
- seteaza `SIZE` octeti incepand cu pozitia `INDEX` la valoarea `VALUE`;
- similar cu un `memset`.
## SHOW INFO
- ofera statistici despre starea memoriei;
- **INFO** poate fi:
- **FREE**: numarul de octeti nealocati si numarul de zone continue libere din memorie;
- **USAGE**: numarul de octeti folositi din arena, eficienta si fragmentarea alocarii;
- **ALLOCATIONS**: afiseaza pentru fiecare zona, daca este libera sau alocata impreuna cu dimensiunea acestora;
- **MAP LENGTH**: afiseaza un sir de `LENGTH` caractere, care ilustreaza memoria gestionata: `*` reprezinta o zona alocata, iar `.` una nealocata.
## ALLOCALIGNED SIZE ALIGN- face acelasi lucru ca `ALLOC`, dar aloca doar la un index care este multiplu de `ALIGN`, unde `ALIGN` este o putere a lui 2.
## REALLOC INDEX SIZE
- realoca zona de memorie de la pozitia `INDEX` cu noua dimensiune de `SIZE`;
- pozitia in care se face realocarea este prima de la stanga la dreapta in care incap `SIZE` octeti.
## DEFRAG
- alipeste toate zonele alocate la stanga, astfel incat, dupa rularea comenzii, fragmentarea scade la *0%*;
- returneaza un vector care face legatura dintre vechii indecsi ai zonelor de memorie si cei noi.
## SAFE_FILL INDEX SIZE VALUE
- functia `FILL` risca sa suprascrie octeti unde nu ar trebuis sa aiba acces;
- functia `SAFE_FILL` verifica sa se scrie la un `INDEX` valid (alocat) si un numar de octeti care nu depaseste zona in care se face scrierea.