Я мог бы просто создать огромный буфер и медленно его заполнять, но это кажется неэффективным и очень требовательным к памяти
Если вам нужно, чтобы все было в памяти- это единственный путь.Вы можете кэшировать промежуточные результаты во временный файл, если сбор всех данных занимает много времени, но в конечном итоге вам придется заполнить этот огромный буфер памяти тем или иным способом.Промежуточное кэширование может быть либо на стороне отправителя, либо на стороне получателя, до вас.
Я не уверен, что могу следовать вашей дилемме ...
edit
После некоторых разъяснений выясняется, что проблема в том, что объем необходимой памяти не известен заранее.
Для этого realloc
действительно является одним из способов обработки, используяфайл как метод временного кэширования позаботится об этом также без дополнительного снижения производительности памяти, которое вызывает realloc
(но вместо этого вы получаете временное снижение производительности, потому что дисковый ввод-вывод намного медленнее).