Shrinking con realloc
-
05-10-2019 - |
Domanda
ho incontrato questo piccolo pezzo di codice in questa domanda , e voleva sapere,
Può la funzione realloc()
mai spostare un blocco di memoria in un'altra posizione, quando lo spazio di memoria puntato è rimpiccioliti?
int * a = malloc( 10*sizeof(int) );
int * b = realloc( a, 5*sizeof(int) );
Se possibile, a quali condizioni, posso aspettarmi b
di avere un diverso indirizzo da quello in a
?
Soluzione
E 'possibile per realloc
per spostare la memoria su qualsiasi chiamata. Vero in molte implementazioni uno strizzacervelli sarebbe solo comportare la modifica della dimensione riservata nel mucchio e non si sarebbe mosso di memoria. Tuttavia in un mucchio cui ottimizzata per partire frammentazione può scegliere di spostare la memoria intorno ad una posizione migliore raccordo.
non dipendono dalla memoria tenendo realloc
nello stesso luogo per qualsiasi operazione.