|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 9, 2004 17:03:58 Можно ещё по принципу БД устроить, хотя тоже самое будет в конечном счёте. Есть тут спец. по этим вопросам, но он обижается, когда его так называют :-) Я не спец, потому что проффессия у меня не та. P.S БД 50% Done!!! А статьи о управлени памяти будут. Будут. Сперва нужно с остальным разобратся. |
|
|
Дата: Янв 9, 2004 17:28:21 Самое простое, что приходит в голову - читать в какой-нибудь буффер текущий ввод пользователя, и изменять "хранилище текста" когда этот буфер целиком заполнится. Правило 1 Средство против фгагментации -- сама фрагментация Файл действительно бъётся на страницы, желатльно размером страницы виртуальной. Создаётся таблица изменённый страниц. При нехватке памяти выделяется Новая страница, в которую сганяются данные. Когда степень фрагментации становится велика, проводится процедура дефрагментации. |
|
|
Дата: Янв 9, 2004 18:42:09 А вот ещё метод: 1. Сначала делаем такой объект - Collection называется. Динамически растущий в обе стороны массив содержащий адреса. Такая вещь всегда в хозяйстве пригодится. 2. Потом делаем небольшую структуру, которая будет представлять из себя одну строку текста: LINEDEF struc lnFlags db ? lnRoom db ? lnText db 2 dup (?) LINEDEF ends lnFlags - флаги для строки: selected, bookmarked, breakpoint, collapsed block of text, etc. - всё, что надо... lnRoom - сколько символов можно поместить в строку без ре-аллокации, та же роль как если бы обьявить: 'char str [64]' - в этом случае 64. lnText - здесь начинается текст. 3. Теперь выберем какой-либо размер как единицу аллокации. Выделять память для каждого символа было бы накладно по времени и по фрагментации памяти. Ну например, берём 32 символа, т.е. если печатать текст, то ре-аллокация будет происходить на 32-м символе. Другими словами наш lnRoom будет кратен этому размеру. 4. Ну и последнее: аллокация/ре-аллокация LINEDEF происходит как: FULL_LINE_ROOM = LINEDEF.lnRoom + sizeof (LINEDEF) и потом цепляем этот LINEDEF объект в наш Collection. 5. Для каждого документа лучше иметь отдельный heap allocator. |
|
|
Дата: Янв 9, 2004 18:58:24 Это и есть разреженные массивы :)) |
|
|
Дата: Янв 10, 2004 04:22:28 Edmond, AsmGuru62 Нда, я уже выпадаю в осадок. Естественно, я ни слова не понял из того, что вы тут наговорили. Но общую мысль уловил (хотя бы потому, что сам такую жевал). Буду читать тринадцатый раз и медитировать (ну нравится мне это состояние духа :) Думаю, справлюсь. Респект всем. |
|
|
Дата: Янв 10, 2004 04:32:07 · Поправил: SolidCode |
|
|
Дата: Янв 10, 2004 04:32:25 >Дык, текстовый редактор :) Только мне нужны различные >шрифты, изображения, произвольное расположение этого >добра и тотальный контроль. Так что richedit отпадает. >На мой вкус, к счастью. Это похоже на PowerPoint, браузер или CorelDRAW. Я когда-то подобие PowerPoint начинал. Короче, сначала надо решить, какая будет логика документа: 1.текстовая (напр. в браузере картинку сложно по конкретным координатам поставить - она привязана к строке) 2.объектная (в Corel'е файл есть список объектов, у каждого свои координаты в документе) |
|
|
Дата: Янв 10, 2004 04:48:51 Потом реализовать соответствующую логику. В принципе получается что-то объектное:
тип объекта указатель на содержимое объекта А в содержимом уже информация конкретного типа объекта. Тогда может быть так: текст->(шрифт, цвет, цвет фона...) текст->(другой шрифт, цвет...) картинка->(адрес файла) ;или смещение, если встроеная URLссылка->(адрес, флаги...) При такой организации получаем:
Проще это всё потом последовательно рисовать для юзера Поиск по тексту ведётся быстро (большую часть поиска мы прыгаем по маленьким дескрипторам объектов, а внутрь входим только если тип объекта подходящий) Вставляем в документ принципиально, что хотим, любой тип объекта Единственное, нужен свой формат организации таких данных. Но если прога создаёт свой формат файла, то проблем нет. А потом можно и конвертацию в любой известный тип файла реализовать. |
|
|
Дата: Янв 10, 2004 04:52:45 · Поправил: SolidCode Ой, простите, я тут чего-то накуролесил. Ещё не совсем разобрался с системой форума. А удалить своё сообщение не могу. А может мне статью написать? Хотя я уже всю идею то и выложил. |
|
|
Дата: Янв 10, 2004 06:32:53 SolidCode Конечно, напишите, а то я опять нифига не понял :) Нет, не надо повторять подробней. Теоретически все понятно. Просто не знаю с какого конца надо начинать воплощать на практике. Если захотите поучаствовать, могу скинуть сделанное, выкладывать на людях просто стыдно :( P.S. Это попытка WYSIWUG для этого форума. Уже третий месяц переписываю сделанные пятнадцать строк, и как дохожу до этого места, придумываю новую концепцию, бросаюсь переписывать все под нее, и снова выясняю, что это никуда не годится и надо снова переделывать. Меня это уже порядком доконало :( |
|
|
Дата: Янв 10, 2004 08:25:18 "P.S. Это попытка WYSIWUG для этого форума. Уже третий месяц переписываю сделанные пятнадцать строк, и как дохожу до этого места, придумываю новую концепцию, бросаюсь переписывать все под нее, и снова выясняю, что это никуда не годится и надо снова переделывать. Меня это уже порядком доконало :(" === Стыдно признаться, однако в моих архивах лежит 7 версий (незаконченных, разумеется!..) моей задумки - AsmDev32. Ну, наверное, номер восемь будет в точку. === |
|
|
Дата: Янв 10, 2004 10:35:15 Сделал так: сначала все так же тупо пишется в линейную стуктуру типа "строка". Когда в начало/середину пишется лишний символ, все справа сгоняется на 256 байт направо, теперь можно безболезненно добивать 255 символов, после этого последует еще один сдвиг. Если символ удаляется, прога ищет ближайшую 256-байтную границу справа и двигает все до нее влево. Если двигать нечего (байт после удаляемого - нулевой), сдвигает весь текст после границы влево на те же 256 байт (то есть забивает освобожденный блок заполненными). Насколько я понял, это и есть истинный разреженный массив. Получается, в худшем случае он будет занимать памяти в 2 раза больше, чем линейный, в моем случае это не смертельно (вряд ли у кого нибудь получится пост больше чем на 64к :) |
|
|
Дата: Янв 11, 2004 03:17:41 · Поправил: SolidCode Я здесь: sergeysolid на сервере mail.ru. Уважаемый hGoblin При разработке этого проекта возможно ли Вам сначала на каком-либо логическом псевдо-языке написать концептуальный алгоритм всей системы? В сложных местах прописать более подробно. И только потом, когда Вы уже сами чувствуете всю систему, когда во сне Вы видите как она работает, только потом выполнять систему в коде. Это чтобы сто раз не переписывать. Чтобы, когда всё уже написали, на стадии отладчика не обнаруживать, что всё это не то и работает не так. |
|
|
Дата: Янв 11, 2004 03:36:16 возможно ли Вам сначала на каком-либо логическом псевдо-языке написать концептуальный алгоритм всей системы? ГЫ, для этого придется как минимум понять, что вы сказали. Завтра чуть доработаю, откомментирую, и скину. |
|
|
Дата: Янв 11, 2004 18:27:36 :-) Ладно, по поводу концептуального алгоритма я пока статью пишу. Надеюсь, её потом тут выложат. Просто я сейчас сам занят довольно большим, для меня, проектом. И постоянно прихожу к тому, что прежде надо прописать всю идею, всю последовательность действий, все варианты, а потом уж кодировать. Иначе просто невозможно всё удержать в голове. Приходится использовать бумажный своп-файл и интерфейс ручки. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.045 |