nei sistemi unix-like
non solo li...
e la risposta di oregon è perfetta!
Ad esempio il significato di memoria condivisa è che piu processi possono leggere da una pagina della memoria, appunto condivisa.
Questo presuppone che sia caricata prima che i processi la vadano a cercare e deallocata dopo che tutti i processi non la usano piu.
La logica quindi fa presumere che venga caricata all'avvio del computer e deallocata al suo termine.
Mentre un processo si "aggancerà" a tale memoria manualmente mentre si "sgangerà" dalla memoria o manualmente o automaticamente (grazie ad il s.o.)
ora durante il processo di "inizializzazione" della memoria globale è naturalmente ovvio che se incontri in degli errori tu debba deallocare manualmente tutto ciò che hai precedentemente allocato.
Scrivere una funzione che deallochi tutto anche se non esiste semplifica la vita.
Non sei entrato nello specifico di cosa come e perchè quindi le risposte rimangono vaghe.