Как быстро конструировать большой QByteArray из частей других QByteArray?
Возникла следующая задача: приходят данные в виде пакетов с заголовками, обернутые в QByteArray. Требуется очень быстро (3072 операции в секунду) извлекать из этих пакетов сырые данные, очищенные от заголовков, и потом забрасывать их в один большой QByteArray для последующей обработки. Проблема в накладных расходах: постоянное копирование и перераспределение памяти при вызовах append() съедает время, и данные начинают теряться. При этом нельзя выходить за пределы Qt из-за требования кроссплатформенности.
Можете подсказать способ победить проблему?
Я вижу несколько вариантов:
1) Заранее выделять/резервировать память в результирующем контейнере (resize()/reserve()). Можно просто где-то много памяти выделить и как буфер её использовать.
2) Использовать другую структуру данных для результата. Но тут должен быть баланс, возможно вы лишитесь преимущества кэш-линии, но быть может это будет не критично.
3) Можно просто в какой-то структуре хранить объекты, а потом собирать, когда достаточно накопится.
Похоже, если не примем решение вообще отказаться от Qt, будем использовать третий вариант, так как на выходе должны быть линейные массивы, представляющие видеокадры HDTV.
А, тут всё равно, Qt или не Qt, std::vector<char> будет вести себя точно также.
Можно поискать какую-то библиотеку для приёма потокового видео, например ffmpeg. Там скорее всего ваша проблема уже решена.