Из того, что написано here, new
выделяет в свободном магазине в то время как malloc
использует кучи и оба термина часто означают то же самое.Безопасно ли выделение памяти realloc новыми?
С того, что написано here, realloc
может переместить блок памяти в новое место. Если свободный магазин и куча - это два разных пространства памяти, значит ли это какая-то проблема?
В частности, я хотел бы знать, если это безопасно использовать
int* data = new int[3];
// ...
int* mydata = (int*)realloc(data,6*sizeof(int));
Если нет, есть ли другой способ realloc
памяти выделяется new
безопасно? Я мог бы выделить новую область и memcpy
содержание, но из того, что я понимаю, realloc
может использовать ту же самую область, если это возможно.
Просто используйте «вектор». –
@KarolyHorvath Как вы знаете, что это жизнеспособный подход в каждом случае? Как насчет развертывания встроенной системы без поддержки стандартной библиотеки? Как насчет интеграции с C-интерфейсом, который может выполнять realloc? –
@KarolyHorvath вы можете проверить, сколько времени занимает выделение 200 МБ памяти с помощью 'malloc' (несколько микросекунд) против' std :: vector' (~ 200 миллисекунд!). 'std :: vector' не является волшебным решением для каждой проблемы с памятью. –