twdragon
@twdragon
Qt/C++ разработчик, ученый, TeX-программист

Как быстро конструировать большой QByteArray из частей других QByteArray?

Возникла следующая задача: приходят данные в виде пакетов с заголовками, обернутые в QByteArray. Требуется очень быстро (3072 операции в секунду) извлекать из этих пакетов сырые данные, очищенные от заголовков, и потом забрасывать их в один большой QByteArray для последующей обработки. Проблема в накладных расходах: постоянное копирование и перераспределение памяти при вызовах append() съедает время, и данные начинают теряться. При этом нельзя выходить за пределы Qt из-за требования кроссплатформенности.
Можете подсказать способ победить проблему?
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Я вижу несколько вариантов:
1) Заранее выделять/резервировать память в результирующем контейнере (resize()/reserve()). Можно просто где-то много памяти выделить и как буфер её использовать.
2) Использовать другую структуру данных для результата. Но тут должен быть баланс, возможно вы лишитесь преимущества кэш-линии, но быть может это будет не критично.
3) Можно просто в какой-то структуре хранить объекты, а потом собирать, когда достаточно накопится.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы