2010-09-24 11 views
6

me encontré con este pequeño trozo de código en this question, & quería saber,encoge con realloc

¿Puede la función realloc() nunca mover un bloque de memoria a otro lugar, cuando el espacio de memoria apuntado se shrinked?

int * a = malloc(10*sizeof(int)); 
int * b = realloc(a, 5*sizeof(int)); 

Si es posible, en qué condiciones, puedo esperar b que tienen una dirección diferente a la de a?

Respuesta

12

Es posible que realloc mueva memoria en cualquier llamada. Es cierto en muchas implementaciones que un encogimiento resultaría en el cambio del tamaño reservado en el montón y no movería la memoria. Sin embargo, en un montón optimizado para una fragmentación baja, puede optar por mover la memoria a una mejor ubicación de ajuste.

No dependa de realloc manteniendo la memoria en el mismo lugar para cualquier operación.

+1

Solo para despejar cualquier duda, en realidad he encontrado esta situación en iOS 6, donde un realloc de 40K a 224 bytes realmente mueve la memoria a una nueva ubicación. – sup

Cuestiones relacionadas