Как уже упоминалось, использование любого байта, который работает в вашей ситуации, будет прекрасно работать в std::string
.Хотя если в ваших строках иначе не используется '\0'
, возможно, будет лучше использовать такой, а не недопустимый байт UTF-8.
Если ваша реализация удовлетворительна с точки зрения скорости, тогда я думаю, что это,В противном случае вы можете посмотреть, как управляются базы данных.В этом случае вы бы использовали буферы фиксированного размера.Большим преимуществом является то, что вы не разбиваете память на множество маленьких кусочков и не запускаете проблемы с выделением памяти позже.Кроме того, по скорости вы бы распределили эти блоки один раз и использовали бы их много раз.Функции malloc()
и free()
дороги, особенно если у вас есть тонна объектов (операторы new
и delete
вызывают эти функции.)
Теперь, чтобы сохранить еще больше памяти, так как она звучитэто главная цель, и, если возможно, в вашей ситуации, вы можете подумать о сжатии ваших строк с помощью zlib.Я бы использовал самый быстрый режим сжатия и посмотрел, меньше ли результирующий буфер, если да, используйте его.В противном случае сохраните несжатую строку.Для этого необходимо сохранить размер (4 байта) на строку.Вы можете установить размер равным 0, когда буфер не сжат.
Еще одна вещь, которую я хотел бы упомянуть, это тот факт, что использование недопустимого байта может привести к путанице у будущего программиста, поддерживающего эту кодовую базу.Независимо от того, сколько у вас там комментариев, они все равно, вероятно, не будут их читать ... вы знаете ... программисты просто склонны читать код, а не столько комментарии.Если это то, что вас беспокоит, вы можете вместо этого сохранить свои сцепленные строки в векторе.Ваша функция разбиения будет принимать в качестве входного вектора вектор char и в качестве результата будет возвращать вектор строк.
Другая возможность заключается в использовании подкачки памяти через mmap()
.Это может быть утомительно при обработке динамических данных.Вот где схема, похожая на базу данных, очень помогает.Вы будете распределять блоки (т.е. 64 КБ за раз) и управлять своими данными на основе блоков.Когда строка становится слишком большой для текущего блока, переместите ее в новый блок ... Преимущество этого метода заключается в том, что данные остаются в памяти, если ОС не решит, что ей требуется часть оперативной памяти, используемой вашим программным обеспечением, и можетпоменяйте его в любое время.Для вас этот обмен будет полностью прозрачным.Это также делает его намного быстрее, чем выполнение замены по умолчанию, которое должно управлять вашей памятью гораздо менее эффективным способом.