Лучший способ увеличить размер буфера кучи - PullRequest
2 голосов
/ 17 июня 2020

Я выделил буфер в куче с помощью malloc, а затем я хочу увеличить этот буфер.

Мне больше не нужны данные в буфере, я хочу только увеличить размер.

Как лучше? realloc или free и malloc?

Ответы [ 3 ]

2 голосов
/ 17 июня 2020

Используйте free(), а затем malloc(). Функция realloc() попытается увеличить размер выделенной памяти на месте, но при необходимости переместит ваши данные в новое место. Поскольку вам больше не нужны данные, это копирование - пустая трата времени.

2 голосов
/ 17 июня 2020

free() и malloc(), вероятно, лучше, потому что realloc() должен был скопировать данные, если в том же месте недостаточно места, что в таком случае является ненужной работой.

1 голос
/ 17 июня 2020

Это близко к оптимизации низкого уровня. Короче говоря: это зависит от обстоятельств. Если вы выделяете только буферы довольно большого размера, free + malloc может быть лучше, потому что вы избегаете копирования старых данных. Но если вы выделяете крошечные буферы, alloc может выделить больше, чем запрошено. В этом случае realloc будет быстрее, потому что это будет обычное бездействие.

...