Сокращение с realloc - PullRequest
       45

Сокращение с realloc

6 голосов
/ 24 сентября 2010

Я столкнулся с этим небольшим фрагментом кода в этом вопросе , и хотел знать,

Может ли функция realloc() когда-либо перемещать блок памяти в другое место, когда указанное пространство памяти сокращается?

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

Если возможно, при каких условиях можно ожидать, что b будет иметь адрес, отличный от адреса в a?

1 Ответ

12 голосов
/ 24 сентября 2010

Возможно realloc переместить память при любом вызове. Правда, во многих реализациях сжатие будет просто приводить к изменению зарезервированного размера в куче и не будет перемещать память. Однако в куче, которая оптимизирована для низкой фрагментации, он может переместить память в более подходящее место.

Не зависит от realloc хранения памяти в одном месте для любой операции.

...