Struttura dei dati per l'allocazione dinamica della memoria


12

Pensa al modello di sonda cellulare. Esiste una struttura di dati che può allocare blocchi di memoria contigui di qualsiasi lunghezza (come ad esempio malloc in C) e liberarli, evitando la segmentazione della memoria, ed esegue ogni operazione nel caso O (log n) deterministico nel caso peggiore dove n è la dimensione totale della memoria?

Evitando la segmentazione della memoria intendo che se il numero totale di celle libere è F, allora dovrei essere in grado di allocare un segmento contiguo di cellule F o di cellule F.

Risposte:


6

Anche senza il limite di tempo, è impossibile "evitare la segmentazione della memoria" a meno che non sia possibile spostare gli oggetti allocati in giro, come in un Garbage Collector compatto. Vedi "Limiti per alcune funzioni relative all'allocazione dinamica di archiviazione" di Robson, che mostra che l'allocazione di byte in blocchi di dimensioni tra e richiede byte di memoria.mnNΩ(mlog(N/n))

Inoltre, il sistema amico raggiunge questo limite e può essere fatto in tempo logaritmico.


Grazie per il riferimento. Autorizzo a spostare gli oggetti allocati (altrimenti sembra abbastanza facile trovare un cattivo esempio). Si applica ancora il limite inferiore di cui parli?
Manu,

Non a mia conoscenza. Potresti voler pubblicare una nuova domanda a riguardo, dal momento che è così diverso da come funziona effettivamente malloc. Una domanda che dovrai considerare, ad esempio, è la questione del tempo che dovrai assegnare all'operazione di spostamento di un blocco di dimensioni . Puoi leggere un po 'di questo in "Mantenimento di array di oggetti contigui" di Bender et al . m
jbapple

Si noti che, se il costo dello spostamento di un blocco è lineare nella sua dimensione e se i blocchi devono essere contigui tra le chiamate a malloc / free, gli algoritmi che impiegano il tempo nel peggiore dei casi non potranno mai spostare blocchi di grandi dimensioni una volta che sono situati. Di conseguenza, modelli come quelli descritti da Robson potrebbero essere ancora possibili, costringendo così l'uso dello spazio superlineare. O(logn)
jbapple

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.