Skip to content

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.

  1. La classe manterrà l’array dei Bucket standard (capacità 4096).
  2. Aggiungerai un LargeBucket, che avrà la capacità colossale di 1 Megabyte (1 * 1024 * 1024 bytes). In MyHeap avremo spazio per 3 LargeBucket.
  3. Nell’Overload di allocate(), fai smistamento: se i byte richiesti sono inferiori o uguali a 4096 serviti dai Bucket ordinari; se eccedono tale limite (ma sono inferiori al 1MB) scandaglia i LargeBucket e consegnane uno.
  4. Assicurati che un new[] esploda con una std::bad_alloc unicamente se si superano i 1MB garantiti o se esaurisci fisicamente i LargeBucket.

Usa lo script nell’editor per esercitarti in questo scenario.