User Tag List

Показано с 1 по 10 из 124

Тема: Как организовать память для текстового редактора?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    27.01.2005
    Сообщений
    924
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    154 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для редактора я бы кучу организовал.
    Максимальную длину строки ограничил бы 1024 байта, например.
    Тогда всё довольно просто - пока в пределах одной строки редактируешь - всё в буфере. Как строку бъёшь - так в куче место выделяется-освбождается. Для 48К накладно, а 128 уже прекрасно.

    А вот как проблему загрузки-выгрузки кусками решать - не представляю. Не думал об этом.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Для редактора я бы кучу организовал.
    Максимальную длину строки ограничил бы 1024 байта, например.
    Тогда всё довольно просто - пока в пределах одной строки редактируешь - всё в буфере. Как строку бъёшь - так в куче место выделяется-освбождается. Для 48К накладно, а 128 уже прекрасно.
    Ага типичный подход в современных программах, памяти море? скорости много? значит как хочу так и делаю не замарачиваясь, смысл тут токо один - не тратить время на обдумывание задачи и поиск оптимального решения.

    Т.е. текст при загрузке попадает в массив элементов (в массиве все элементы одного размера), каждая строка имеет свой собственный буфер редактирования (это типа как отдельный текстовый редактор для каждой строки, даже парралельно 2 и больше процессора могут редактировать разные строки). Памяти жрет такое решение уйму и ограничивает длинну строки. Ну и наверное строки хранить тут имеет смысл в том же виде как и предложенно ранее - строка идет сначала елемента массива и до курсора потом пустое место и остаток строки в конце элемента массива.

  4. #3

    Регистрация
    27.01.2005
    Сообщений
    924
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    154 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    Ага типичный подход в современных программах, памяти море? скорости много? значит как хочу так и делаю не замарачиваясь, смысл тут токо один - не тратить время на обдумывание задачи и поиск оптимального решения.
    Дорогой Критик, я Кучу реализовывал для AVR 4MГЦ c внешним ОЗУ. Очень даже хорошо получилось. На элемент кучи - динамический заголовок (от 1 до 3 байт). Этого достаточно для хранении всей информации об элементе, даже если побить память на странички по 16К.

    Это сильно большие расходы - 3 байта на длинную стоку? ИМХО - нет, скорость выделения памяти и освобождения всё это оправдывает.

    Принцип такой:
    Каждый элемент хранит заголовок, в котором указаны длина элемента, занят он или свободен.
    После инициализации - каждая страница кучи состоит из одного элемента, размером "Размер страницы-Размер элемента".
    Старшие два бита (6 и 7) указывают размер заголовка - 1,2 или 3 байта.
    Бит 5 - показывает занят элемент или свободен.
    Бит 4 - резерв
    Биты [3..0] - размер элемента для 1байтового заголовка.

    Что получаем? Очень просто -
    для эл-тов кучи от 0 до 15 байт - заголовок 1байт,
    для 16-255 байт - 4095 байт.
    и для эл-тов 4096-16381 байт (размер страницы 16К - 3б) - 3 байта

    Где тут нужно "море памяти"? Где тут "мегатактовые частоты"? На АВР 4 МГЦ в реалтайме работает и не глючит.

    При таком хранении как раз память выделяется крайне быстро. Алгоритм прост и прозрачен. Работает автоосвобождение памяти (объединение нескольких свободных элементов подряд в 1 большой свободный элемент).

    Можно ещё больше ускорить алгоритм, создав заголовок страницы и хранить там например размер наибольшего свободного куска на данной странице.

    Цитата Сообщение от bigral Посмотреть сообщение
    Т.е. текст при загрузке попадает в массив элементов (в массиве все элементы одного размера), каждая строка имеет свой собственный буфер редактирования (это типа как отдельный текстовый редактор для каждой строки, даже парралельно 2 и больше процессора могут редактировать разные строки).
    Какой "свой собственный буфер"? Один буфер на все строки. Переместился на строку - она в буфер, ушёл на другую - другая в буфер. Скопировать килобайт байт - спек может быстро и незаметно для юзера. Хотя.. Где ты видел килобайтовые строки в реальных текстах?! Обычно не более 80 байт при спековском разрешении.

    Цитата Сообщение от bigral Посмотреть сообщение
    Памяти жрет такое решение уйму и ограничивает длинну строки.
    В чём накладыне расходы? на пустую строку - 1 байт. На среднюю строку ( 30-150 байт) - 2 байта.

    Ну и буфер 1024 байта - это более чем достаточно. Мало - выделяй динамически. Или сделай 16384 байта. Только я живу в реальном мире, где тексты пишутся, чтобы читать, а не чтобы мучаться.

    Для текстового редактора реально ещё нужен массив адресов строк - 3 байта на строку (с учётом банки). Тогда - если 1 банка под массив - то максимальный размер текста - 5450 строк примерно. Часто ты такие тексты пишешь в одном файле?

    Мне кажется - исходить надо из удобства и скорости. Пользователю пофиг как там у вас чего организовано. Но если при вставлении символа текста он по 3 секунды ждать будет - то заплюёт.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Алгоритм текстового Quest'a
    от ALKO в разделе Программирование
    Ответов: 11
    Последнее: 23.12.2010, 00:47
  2. Как проще код из текстового файла -> Alasm-файл?
    от TomCaT в разделе Программирование
    Ответов: 10
    Последнее: 28.05.2010, 16:53
  3. Адаптация текстового редактора
    от Raydac в разделе Софт
    Ответов: 1
    Последнее: 09.06.2008, 14:27
  4. Интересная идея текстового интерфейса в играх
    от Black_Cat в разделе Программирование
    Ответов: 3
    Последнее: 18.11.2006, 15:22
  5. Проект муз. редактора для AY
    от Bulba в разделе Музыка
    Ответов: 36
    Последнее: 09.09.2005, 20:32

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •