Я сохранил строки в диапазоне 10 или 100 МБ без проблем.Естественно, оно будет в первую очередь ограничено вашей доступной (непрерывной) памятью / адресным пространством.
Если вы собираетесь добавлять / объединять, есть несколько вещей, которые могут помочь с точки зрения эффективности: если возможно, попробуйтеиспользование функции-члена reserve () для предварительного выделения пространства - даже если у вас есть приблизительное представление о том, каким может быть конечный размер, это избавит от ненужных перераспределений по мере роста строки.
Кроме того, во многих реализациях строк используется «экспоненциальный рост», что означает, что они увеличиваются на некоторый процент , а не на фиксированный размер в байтах.Например, он может просто удвоить емкость каждый раз, когда требуется дополнительное пространство.Увеличивая размер экспоненциально, становится более эффективным выполнять множество конкатенаций.(Точные детали будут зависеть от вашей версии stl.)
Наконец, другой вариант (если ваша библиотека поддерживает это) - использовать шаблон веревка <> : Канаты похожи на строки,за исключением того, что они намного более эффективны при выполнении операций с очень большими строками.В частности, «веревки распределяются небольшими порциями, что значительно уменьшает проблемы фрагментации памяти, создаваемые большими блоками».Некоторые дополнительные сведения о Руководстве SGI по STL .