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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top