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.

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.


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)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.