Esercizi Pratici: Espressioni
Il capitolo si è tuffato a capofitto nella customizzazione del linguaggio (Overloading di Operatori matematici, manipolazione di Allocatori di Memoria customizzati per new e delete). Chiudiamo con un test di padronanza del mezzo.
Esercizio: Estendere l’Heap per supportare LargeBuckets
Section titled “Esercizio: Estendere l’Heap per supportare LargeBuckets”Nell’esempio teorico “Gestione Avanzata della Memoria Dinamica”, avevamo implementato la customizzazione del costrutto new delegando ad un MyHeap provvisto di piccolissimi secchi (Bucket) da 4096 bytes (la pagina canonica base del sistema operativo).
Se richiedevi più di 4096 bytes lanciava istantaneamente una bad_alloc.
L’Obiettivo: Estendi e robustisci la classe Memory Manager affinché essa gestisca due tier (livelli) indipendenti di contenitori di memoria.
- La classe manterrà l’array dei Bucket standard (capacità 4096).
- Aggiungerai un LargeBucket, che avrà la capacità colossale di 1 Megabyte (
1 * 1024 * 1024bytes). InMyHeapavremo spazio per 3LargeBucket. - Nell’Overload di
allocate(), fai smistamento: se i byte richiesti sono inferiori o uguali a 4096 serviti daiBucketordinari; se eccedono tale limite (ma sono inferiori al 1MB) scandaglia iLargeBuckete consegnane uno. - Assicurati che un
new[]esploda con unastd::bad_allocunicamente se si superano i 1MB garantiti o se esaurisci fisicamente iLargeBucket.
Usa lo script nell’editor per esercitarti in questo scenario.