La frammentazione della memoria si verifica quando un sistema contiene memoria tecnicamente libera ma che il computer non può utilizzare. L'allocatore di memoria, che assegna la memoria necessaria a vari compiti, divide e alloca i blocchi di memoria come richiesto dai programmi; quando i dati vengono eliminati, vengono liberati più blocchi di memoria nel sistema e aggiunti di nuovo al pool di memoria disponibile. Quando le azioni dell'allocatore o il ripristino di segmenti di memoria precedentemente occupati portano a blocchi o addirittura byte di memoria troppo piccoli o troppo isolati per essere utilizzati dal pool di memoria, si è verificata una frammentazione. La frammentazione può intaccare notevolmente la memoria libera di un computer ed è spesso la causa di frustranti messaggi di errore di memoria esaurita.
Frammentazione interna
La frammentazione interna si verifica quando l'allocatore di memoria lascia spazio extra vuoto all'interno di un blocco di memoria che è stato allocato per un client. Questo di solito accade perché il design del processore prevede che la memoria debba essere tagliata in blocchi di determinate dimensioni, ad esempio, potrebbe essere necessario dividere uniformemente i blocchi per quattro, otto o 16 byte. Quando ciò si verifica, ad un client che ha bisogno di 57 byte di memoria, ad esempio, può essere allocato un blocco che contiene 60 byte, o anche 64. I byte extra di cui il client non ha bisogno vanno sprecati e nel tempo questi piccoli pezzi di memoria inutilizzata può accumularsi e creare grandi quantità di memoria che non possono essere utilizzate dall'allocatore. Poiché tutti questi byte inutili si trovano all'interno di blocchi di memoria più grandi, la frammentazione è considerata interna.
Frammentazione Esterna
La frammentazione esterna si verifica quando l'allocatore di memoria lascia sezioni di blocchi di memoria inutilizzati tra porzioni di memoria allocata. Ad esempio, se diversi blocchi di memoria sono allocati in una riga continua ma uno dei blocchi centrali della riga viene liberato (forse perché il processo che stava utilizzando quel blocco di memoria ha smesso di funzionare), il blocco libero viene frammentato. Il blocco è ancora disponibile per l'uso da parte dell'allocatore in un secondo momento se è necessaria una memoria adatta a quel blocco, ma il blocco è ora inutilizzabile per esigenze di memoria maggiori. Non può essere ricondotto alla memoria libera totale disponibile per il sistema, poiché la memoria totale deve essere contigua affinché sia utilizzabile per attività più grandi. In questo modo, intere sezioni di memoria libera possono finire isolate dall'insieme spesso troppo piccole per un utilizzo significativo, il che crea una riduzione complessiva della memoria libera che nel tempo può portare a una mancanza di memoria disponibile per le attività chiave.
La frammentazione può significare grossi problemi per i sistemi
La frammentazione può diventare un problema perché si accumula nel tempo, creando blocchi di memoria piccoli e inutili e limitando la quantità di memoria libera disponibile di un computer. Man mano che progredisce, la frammentazione può far rallentare e rallentare le prestazioni del sistema a breve termine; a lungo termine, la frammentazione può ridurre in media la vita di un computer o di un server del 30%. Dei due tipi di frammentazione, interna è più prevedibile di esterna perché la quantità di spazio sprecato è determinata dai parametri dell'allocatore di memoria (quanto devono essere grandi i blocchi allocati), che è una costante. Inoltre, la quantità di memoria complessiva persa a causa della frammentazione interna è generalmente inferiore a quella persa a causa della frammentazione esterna, sebbene possa accumularsi gradualmente. La frammentazione esterna, d'altra parte, è più difficile da prevedere perché nella maggior parte dei casi diversi processi si avviano e si arrestano regolarmente nel sistema e i blocchi di memoria utilizzati per periodi di tempo variabili vengono liberati in un ordine diverso da quello in cui sono stati riempiti, lasciando spazi vuoti nella memoria disponibile.
Combattere la frammentazione per migliorare le prestazioni
Quando si tratta di ottimizzare la RAM, l'unica soluzione utile è riavviare il sistema, che cancella gran parte della memoria in uso da programmi di lunga durata e dà al computer un nuovo inizio per l'allocazione della memoria. Gli strumenti che pretendono di deframmentare la RAM sono fuorvianti, poiché il gestore della memoria virtuale nei computer moderni lavora per ottimizzare costantemente l'utilizzo della RAM. Per il disco rigido, tuttavia, potrebbe essere necessaria una deframmentazione per massimizzare le prestazioni del sistema. Se esegui Windows Vista o versioni successive, il sistema deframmenta automaticamente lo spazio sul disco rigido periodicamente per te. Se noti prestazioni del sistema più lente e desideri eseguire tu stesso l'utilità di deframmentazione, puoi avviare manualmente il processo facendo clic su "Start", quindi su "Tutti i programmi | Accessori | Strumenti di sistema | Utilità di deframmentazione dischi". Infine, fai clic su "Deframmenta ora". Il processo potrebbe richiedere da minuti a ore a seconda di quanto è frammentato il disco rigido, ma la buona notizia è che puoi utilizzare il computer mentre l'Utilità di deframmentazione dischi è in esecuzione.
Il problema della frammentazione non si applica a tutti i sistemi operativi allo stesso modo. Per i computer Mac, la deframmentazione non è necessaria perché Mac OS X ottimizza automaticamente lo spazio su disco quando vengono scritti i file. Inoltre, le macchine Linux non richiedono una deframmentazione regolare perché assegnano la memoria in un formato sparso anziché in uno contiguo, dando ai file spazio per l'espansione. Gli utenti Linux che vedono un calo delle prestazioni del sistema dovrebbero prendere in considerazione l'aumento delle dimensioni del proprio disco rigido. Infine, non dovresti mai deframmentare un'unità di archiviazione a stato solido (come un'unità USB), poiché la deframmentazione può effettivamente ridurre la vita utile delle unità a stato solido.