Исправление firkax, (текущая версия) :
Ничего не странное. В DOS и наверно CP/M есть ещё $-терминированные строки в одном месте.
Дело было только в экономии памяти на дополнительный указатель на конец строки, или?
Не столько экономия чуть-чуть памяти, сколько большая экономия в сложности многих алгоритмов. Кроме твоего варианта есть ещё другие, итого:
1) строка, терминированная спецсимволом (null или не null, не особо важно)
2) строка, для передачи которой надо слать два указателя (твой вариант)
3) строка, для передачи которой надо слать указатель и длину
4) строка, у которой длина записана в начале выделенной ей области памяти
5) строка, у которой указатель на конец записан в начале выделенной ей области памяти
6) строка, состоящая из двух выделенный блоков памяти, один с двумя указателями либо указателем+длиной, второй собственно с данными
Все варианты кроме первого требуют так или иначе задействовать две сущности вместо одной, а они и занимают память (что не особо важно), и регистры проца (важнее), и замусоривают исходный код работы со строками (важнее).
Во вариантах 2 и 3 замусоривается не только код собственно обработки строк, но и все места, где строки вообще упоминаются.
Вариант 4 получается либо зависящим от платформы (т.е. его нельзя сдампить в файл как есть), либо ограничивающим длину строки непонятными ограничениями (если длина фиксрованной битности). Вариант 5 зависящий от платформы и, хуже того, от расположения строки в памяти (нельзя не только сдампить, но и побайтово скопировать). Оба варианта 4 и 5 не дадут скользить вдоль строки, переставляя её начало на новое место.
Вариант 6 устраивает разные проблемы с аллокатором памяти, когда ты не знаешь что там выделено статически а что динамически.
У варианта 1 конечно тоже есть недостаток: невозможность быстро узнать длину строки. Но он видимо не таокй существенный как остальное перечисленное.
Впрочем, варианты 3 и 6 в Си тоже используют. А вот твой с двумя указателями я где-то видел но очень мало. Причём 6 можно дальше развивать, но это уже не просто строка а буфер с дополнительным функционалом.
Исходная версия firkax, :
Ничего не странное. В DOS и наверно CP/M есть ещё $-терминированные строки в одном месте.
Дело было только в экономии памяти на дополнительный указатель на конец строки, или?
Не столько экономия чуть-чуть памяти, сколько большая экономия в сложности многих алгоритмов. Кроме твоего варианта есть ещё другие, итого:
1) строка, терминированная спецсимволом (null или не null, не особо важно)
2) строка, для передачи которой надо слать два указателя (твой вариант)
3) строка, для передачи которой надо слать указатель и длину
4) строка, у которой длина записана в начале выделенной ей области памяти
5) строка, у которой указатель на конец записан в начале выделенной ей области памяти
6) строка, состоящая из двух выделенный блоков памяти, один с двумя указателями либо указателем+длиной, второй собственно с данными
Все варианты кроме первого требуют так или иначе задействовать две сущности вместо одной, а они и занимают память (что не особо важно), и регистры проца (важнее), и замусоривают исходный код работы со строками (важнее).
Во вариантах 2 и 3 замусоривается не только код собственно обработки строк, но и все места, где строки вообще упоминаются.
Вариант 4 получается либо зависящим от платформы (т.е. его нельзя сдампить в файл как есть), либо ограничивающим длину строки непонятными ограничениями (если длина фиксрованной битности). Вариант 5 зависящий от платформы и, хуже того, от расположения строки в памяти (нельзя не только сдампить, но и побайтово скопировать). Оба варианта 4 и 5 не дадут скользить вдоль строки, переставляя её начало на новое место.
Вариант 6 устраивает разные проблемы с аллокатором памяти, когда ты не знаешь что там выделено статически а что динамически.
У варианта 1 конечно тоже есть недостаток: невозможность быстро узнать длину строки. Но он видимо не таокй существенный как остальное перечисленное.