Сжатие с realloc

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

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

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

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


person Community    schedule 24.09.2010    source источник


Ответы (1)


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

Не полагайтесь на то, что realloc память будет храниться в одном и том же месте для любой операции.

person JaredPar    schedule 24.09.2010
comment
Просто чтобы развеять любые сомнения, я действительно столкнулся с этой ситуацией на iOS 6, когда перераспределение 40 КБ до 224 байт фактически перемещает память в новое место. - person sup; 23.03.2013