Старый формат текста включал в себя три абстрации - символ, строка и весь текст. У символа был код (и неявным образом номер строка и номер столбца). У строки был только порядковый номер. А у текста ничего не было. Потом тексты стали файлами, а у файлов есть метаинформация в директории (дата создания, кто автор, идентификаторы текста - имя и месторасположение на диске). Потом появились текстовые процессоры и кроме строк появились таблицы, внедрённые рисунки, гиперссылки (это всё параллельно с внедрением HTML). Потом появились средства совместной работы, когда автор прописывается не на весь текст, а на фрагменты текста. К символам добавился язык (ну и прочие атрибуты, например размер, цвет, толщина, вариант начертания). И всё это надо как-то хранить.

Присмотримся к символу:
(4) указатель на файл
(4) позиция в файле (у файла - фрагменты (возможно единственный), у фрагментов - кодировка/формат)
(4) указатель на строку (у строки указатель на текст)
(4) указатель на кодировку
(2) представление символа в кодировке
(4) указатель на автора
(4) указатель на стиль
(8) положение на странице (если это фиксированный формат какой-нибудь, типа .pdf)
(2) ориентация в пространстве

и ещё что-нибудь можно придумать.
То, что Павиа говорит, что один символ сейчас много занимает - это мало. Можно занимать гораздо больше! 36 байт + метаинформация языка :)

И тут начинаются ручные экономии - тут это хранить не будем, там что-нибудь начнём на лету вычислять. Сделаем интервалы и применим RLE.
Но неизвестно заранее что именно понадобится. И имён разных нужно много придумать для разных вариантов хранения (нет унификации).

В принципе, можно было бы померить средний размер символа, набрав текст в Write и поделив размер файла на число символов. Ну это если бы там компрессии не было.

Отредактировано Лис (2017-03-27 22:49:54)