Если ты проводишь над КОПИЕЙ то где твоя хваленая эффективность.
Командная строка уже много лет как прекрасно нарезается готовыми библиотеками
Твои примеры на уровне задачек по программированию для школьников или студентов
То есть ты даже НЕ ПОНИМАЕШЬ, что твой алгоритм нарезания строк вставкой 0 в середину подразумевает 2 операции, существенно снижающих производительность:
Приведи здесь пример своего кода, реализующего твой "эффективный простой безсдвиговый" алгоритм:
2. Если вам нужно ОДИН раз УЗНАТЬ, но чтобы 100 раз ИСПОЛЬЗОВАТЬ, то все равно нужно ХРАНИТЬ то, что вы уже узнали.
2. Программа с строками стиля Паскаль, если ей по алгоритму этого не нужно, может прекрасно также НЕ ЧИТАТЬ уже определенную длину.
Над ним работало и работает очень много народу
основаны на незнании предметной области
Просто прочитать длину строки (1-2-4 байта)
Просто найти конец строки 0 в строке "hello, world" = прочитать 15 байт, дурачина.
Длина строки (или другим способом определить ее окончание) нужна в подавляющем большинстве случаев:
Вставка в середину (чтобы быть уверенным что не выходишь за пределы строки),
Поиск в строке,
Не надо. В Паскале также передается ТОЛЬКО адрес начала.
0 в конце подразумевает линейный перебор в поисках конца.
В БД и файловой системы индексы используются, иначе они работают неприемлимо долго.
А при наличие индекса ноль в конце уже не нужен.
Все эти вещи давно уже в библиотеках да в компилятор встроены.
А как ты там файлы искать будешь?
В таких случаях используют каталог вложенных файлов, а где каталог - там и размеры.
Нельзя.
При выполнении операции, нужно быть уверенным, что ты не выходишь за пределы выделенной под строку памяти.
Как раз наборот, дурачок.
При разрезании строки твоим методом вставки нуля в середину - нужно СДВИГАТЬ всю последующую часть строки на один байт.
А вот наличие отдельной структуры, хранящей длины виртуально нарезанных строк позволяет разрезать строки без массовых ненужных перемещений в памяти.
4. Самый быстрый метод разрезания строк (без сдвигов) - гигантская (без 0) строка. И отдельный каталог, содержащий определения (адреса и размеры) виртуально порезанных подстрок.
Методом добавления 0 разрезать строку на подстроки, сохраняя указатели на них, невозможно.
1. С помощью указателя можно гулять по ЛЮБОЙ строке.
2. Зачем вам на практике 4204067..... ? Если речь идет о текстовом редакторе, то там совсем по другому организовано хранение. Не в одной строке.
3. Разве что в примитивных текстовых редакторах можно все запихнуть в одну строку.
4. Если тебе нужно работать со строками такой длины 4204067..., то для строки типа Паскаль никто не мешает использовать не 1 (ограничение на максимальную длину 255), а 4 байта для хранения длины.
5. Что? В строка типа Паскаль можно хранить на 3 полезных байта меньше? При длине строки 4204067... ты считаешь это важным?
А если действительно используются возможности по максимуму, то есть работаем с гигантскими строками 4204067..., то искать конец строки в такой строке - просто глупо.
тот же std::string вполне себе хранит размер
Ну этот же size_t и поместите в качестве первого байта. Почему вы не говорите, что возвращаемый strlen результат "слишком большой"?
А для строки типа Pascal затраты на хранение длины составляют на 3 байта больше.
А на длинных строках операция проверки заранее известной длины занимает меньше времени, чем операция поиска конца строки.
То есть ты считаешь, что перебор строки в поисках концевого нуля - это быстрее?????
Если не память не изменяет такие строки там называются PChar.
Торможение TheBat!, да и другой программы подобной сложности, вызвано вовсе использованием строк того или иного типа. А общей неэффективностью алгоритмов более высокого уровня, построенных поверх строк.
На каком компьютере TheBat! тормозит? На Pentium-I, II, III?
То что тормозят и требуют специального Runtime программы на C# не напрягает?
Я вам сразу сказал - меня не особо интересуют остальные достижения этого человека
Кто хранит строки миллиардного размера в C-string literals?
В памяти такая строка занимает те же что и С = число символов в строке + 1 байт в начале, хранящий её длину.
Дельфи программы тормозят
строке на миллиард символов достаточно 4 байт для записи размера
если мало, можно взять 8
зато, чтобы вычислить длину строки - надо пройти её от начала и до конца
Хорошее чтиво:
Они простые, потому и живы. Если бы они были сложные, то не смогли бы преодолеть 40-летний рубеж и язык бы умер вместе с ними, как произошло с Паскалем.