2010-09-24 4 views
6

je rencontrais ce petit morceau de code dans this question, & voulait savoir,Shrinking avec realloc

la fonction realloc() ne peut 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 espérer b d'avoir une adresse différente de celle a?

Répondre

12

Il est possible pour realloc de déplacer de la mémoire sur n'importe quel appel. Vrai dans de nombreuses implémentations, un rétrécissement entraînerait simplement le changement de la taille réservée dans le tas et ne déplacerait pas la mémoire. Cependant, dans un tas optimisé pour une faible fragmentation, il peut choisir de déplacer la mémoire vers un meilleur emplacement.

Ne dépendez pas de realloc en gardant la mémoire au même endroit pour toute opération.

+1

Juste pour lever le doute, j'ai effectivement rencontré cette situation sur iOS 6 où un realloc de 40K jusqu'à 224 octets déplace réellement la mémoire à un nouvel emplacement. – sup

Questions connexes