Усадка с Realloc
-
05-10-2019 - |
Вопрос
Я столкнулся с этим маленьким кусочком кода в этот вопрос, & хотел знать,
Может realloc()
Функция когда-либо перемещается блок памяти в другое место, когда пространство памяти указывало, что уклоняется?
int * a = malloc( 10*sizeof(int) );
int * b = realloc( a, 5*sizeof(int) );
Если возможно, при каких условиях я могу ожидать b
иметь адрес, отличный от этого в a
?
Решение
Это возможно для realloc
переместить память на любой вызов. Правда во многих реализациях усадка просто приведет к изменению зарезервированных размеров в куче и не будет перемещать память. Однако в куче, который оптимизирован для низкой фрагментации, он может выбрать память вокруг до лучшего места установки.
Не зависит от realloc
хранение памяти в том же месте для любой операции.
Не связан с StackOverflow