Structure de données pour l'allocation dynamique de mémoire

12

Pensez au modèle cellule-sonde. Existe-t-il une structure de données qui peut allouer des morceaux de mémoire contigus de n'importe quelle longueur (comme par exemple malloc en C), et les libérer, tout en évitant la segmentation de la mémoire, et exécute chaque opération dans le pire des cas O (log n) déterministe où n est la taille totale de la mémoire?

En évitant la segmentation de la mémoire, je veux dire que si le nombre total de cellules libres est F, alors je devrais être en mesure d'allouer un segment contigu de cellules F ou environ F cellules.

Manu
la source

Réponses:

6

Même sans limite de temps, il est impossible "d'éviter la segmentation de la mémoire" à moins que vous ne puissiez déplacer les objets alloués, comme dans un garbage collector de compactage. Voir «Limites de certaines fonctions concernant l'allocation de stockage dynamique» de Robson, qui montre que l'allocation de octets dans des blocs de taille entre n et N nécessite Ω ( m log ( N / n ) ) octets de mémoire.mnNΩ(mlog(N/n))

De plus, le système de jumelage atteint cette limite et peut être effectué en temps logarithmique.

jbapple
la source
Merci pour la référence. Je permet de déplacer les objets alloués (sinon il semble assez facile de trouver un mauvais exemple). La borne inférieure que vous mentionnez s'applique-t-elle toujours?
Manu
m
O(logn)
4

Cet article, http://dl.acm.org/citation.cfm?id=3070693 , répond exactement à la question de l'allocation de mémoire où vous pouvez déplacer des objets mais à un coût.

Martin Farach-Colton
la source