Рассмотрите официальное сообщение documentation за libuv (раздел прочие коммунальные платежи).
Это декларация uv_buf_init
:libuv и uv_buf_init: кто должен освобождать что?
uv_buf_t uv_buf_init(char* base, unsigned int len)
В документации говорится, что (курсив мой):
Конструктор для uv_buf_t.
Из-за различий в платформе пользователь не может рассчитывать на упорядочение базовых и len-элементов структуры uv_buf_t. Пользователь несет ответственность за освобождение базы после выполнения uv_buf_t. Возвращаемая структура передается по значению.
Мне кажется, что base
может быть освобожден сразу же после звонка в uv_buf_init
.
С другой стороны, A uv_buf_t
структура is documented, как состоит из двух полей: base
, что имеет тип char *
и len
, что имеет тип size_t
.
Что не ясно мне:
копируются данные более в буфер? (Ну, я думаю, ответ отрицательный, поскольку это было бы большим штрафом с точки зрения производительности).
Должен ли я освобождать данные после вызова
uv_try_write
или других функций*_write
? То есть, как только данные действительно потребляются.
Вы должны использовать valgrind для проверки или чтения исходного кода, если документации недостаточно. Кроме того, различия между платформами в том, где они фактически хранятся, кажутся мне неактуальными. –
@self Прочитайте источник и да: документации недостаточно (это действительно ужасно). – skypjack