Shrinking avec realloc
-
05-10-2019 - |
Question
Je rencontre ce petit morceau de code cette question , et voulait savoir,
peut-il la fonction realloc()
jamais déplacer un bloc de mémoire à un autre emplacement, lorsque l'espace mémoire pointé est rétreint?
int * a = malloc( 10*sizeof(int) );
int * b = realloc( a, 5*sizeof(int) );
Si possible, dans quelles conditions, puis-je attendre b
d'avoir une autre adresse de celle a
?
La solution
Il est possible de se déplacer realloc
mémoire sur un appel. Vrai dans de nombreuses implémentations un psy serait tout simplement entraîner le changement de la taille réservée dans le tas et ne bouge pas la mémoire. Cependant, dans un tas qui optimisé pour une faible fragmentation, il peut choisir de déplacer la mémoire autour d'un emplacement meilleur ajustement.
Ne pas dépendre de la mémoire de maintien de realloc
au même endroit pour toute opération.